Updated the repository database generation process by removing old DB files, creating a temporary directory for metadata, and adjusting symlink creation for GitHub Pages. Changed commit message to reflect manual database generation and fixed indices.
112 lines
4.3 KiB
YAML
112 lines
4.3 KiB
YAML
name: Update Arch Repository
|
|
|
|
on:
|
|
push:
|
|
paths:
|
|
- 'x86_64/*.pkg.tar.zst'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
update-db:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Setup tools
|
|
run: sudo apt-get update && sudo apt-get install -y libarchive-tools
|
|
|
|
- name: Update Repository Database
|
|
run: |
|
|
cd x86_64
|
|
# Remove old DB files
|
|
rm -f hyprarch-repo.db hyprarch-repo.db.tar.gz hyprarch-repo.files hyprarch-repo.files.tar.gz
|
|
|
|
# Create a temporary directory for metadata
|
|
mkdir -p db_temp
|
|
|
|
# Extract metadata from each package and put it into the DB structure
|
|
for pkg in *.pkg.tar.zst; do
|
|
pkgname=$(bsdtar -xOf "$pkg" .PKGINFO | grep "^pkgname =" | cut -d' ' -f3)
|
|
pkgver=$(bsdtar -xOf "$pkg" .PKGINFO | grep "^pkgver =" | cut -d' ' -f3)
|
|
mkdir -p "db_temp/$pkgname-$pkgver"
|
|
bsdtar -xOf "$pkg" .PKGINFO > "db_temp/$pkgname-$pkgver/desc"
|
|
# Add file size and build date to desc
|
|
echo -e "\n%FILENAME%\n$pkg" >> "db_temp/$pkgname-$pkgver/desc"
|
|
echo -e "\n%CSIZE%\n$(stat -c%s "$pkg")" >> "db_temp/$pkgname-$pkgver/desc"
|
|
done
|
|
|
|
# Compress the metadata into a real Arch DB
|
|
cd db_temp
|
|
tar -c * | gzip -9 > ../hyprarch-repo.db.tar.gz
|
|
cd ..
|
|
rm -rf db_temp
|
|
|
|
# Create the required symlinks/copies for GitHub Pages
|
|
cp hyprarch-repo.db.tar.gz hyprarch-repo.db
|
|
cp hyprarch-repo.db.tar.gz hyprarch-repo.files
|
|
cp hyprarch-repo.db.tar.gz hyprarch-repo.files.tar.gz
|
|
|
|
- name: Generate Subfolder Index
|
|
run: |
|
|
cd x86_64
|
|
echo "<html><head><title>Index of /x86_64/</title></head><body style='font-family: monospace;'>" > index.html
|
|
echo "<h1>Index of /x86_64/</h1><hr><pre>" >> index.html
|
|
echo "<a href='../'>../</a>" >> index.html
|
|
for file in *; do
|
|
if [ "$file" != "index.html" ]; then
|
|
size=$(du -sh "$file" | cut -f1)
|
|
date=$(date -r "$file" '+%d-%b-%Y %H:%M')
|
|
printf "<a href='%s'>%s</a>%-$(($(printf '%s' "$file" | wc -c) > 50 ? 1 : 50 - $(printf '%s' "$file" | wc -c)))s %s %8s\n" "$file" "$file" "" "$date" "$size" >> index.html
|
|
fi
|
|
done
|
|
echo "</pre><hr></body></html>" >> index.html
|
|
|
|
- name: Generate Root Landing Page
|
|
run: |
|
|
echo '<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>HyprArch Repository</title>
|
|
<style>
|
|
body { font-family: sans-serif; margin: 40px; line-height: 1.6; background: #2e3440; color: #eceff4; }
|
|
a { color: #88c0d0; text-decoration: none; }
|
|
a:hover { text-decoration: underline; }
|
|
.container { max-width: 800px; margin: auto; background: #3b4252; padding: 20px; border-radius: 8px; }
|
|
h1 { border-bottom: 2px solid #4c566a; padding-bottom: 10px; }
|
|
pre { background: #2e3440; padding: 15px; border-radius: 5px; color: #ebcb8b; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<h1>🚀 HyprArch Custom Repository</h1>
|
|
<p>To use this repository, add the following to your <code>/etc/pacman.conf</code>:</p>
|
|
<pre>[hyprarch-repo]
|
|
SigLevel = Optional TrustAll
|
|
Server = https://hyprarch-repo.stuple.net/$arch</pre>
|
|
|
|
<h2>📦 Available Packages</h2>
|
|
<ul>
|
|
<li><a href="./x86_64/">Browse x86_64 Packages</a></li>
|
|
</ul>
|
|
<hr>
|
|
<p><small>Automated by GitHub Actions</small></p>
|
|
</div>
|
|
</body>
|
|
</html>' > index.html
|
|
|
|
- name: Commit and Push changes
|
|
run: |
|
|
git config --global user.name "github-actions[bot]"
|
|
git config --global user.email "github-actions[bot]@users.noreply.github.com"
|
|
git add .
|
|
if ! git diff-index --quiet HEAD; then
|
|
git commit -m "Manual DB generation and fixed indices"
|
|
git push
|
|
else
|
|
echo "Nothing to change."
|
|
fi
|