Skip to content

Fixes

Fixes #23

Workflow file for this run

name: publish-releases
on:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: write
packages: write
id-token: write
jobs:
build-and-publish:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
persist-credentials: true
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: "3.11"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Build local arch if needed and create .pkg artifacts
run: |
set -euo pipefail
export PATH="$(pwd)/build/core/bin:$PATH"
chmod +x scripts/create_pkg.py
shopt -s globstar nullglob
for src in pkgs/src/*/*; do
if [ -d "$src" ]; then
echo "Building package from $src"
./scripts/create_pkg.py "$src" --out-root pkgs/bin || {
echo "create_pkg failed for $src"; exit 1;
}
fi
done
- name: Generate index and manifests (docs/)
run: |
set -euo pipefail
chmod +x scripts/gen_index.py
./scripts/gen_index.py --input pkgs/bin --out docs
- name: Commit docs (Pages) changes
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
git add docs || true
if ! git diff --staged --quiet; then
git commit -m "ci: update docs (index and manifests) [skip ci]" || true
git push origin HEAD:main
else
echo "No docs changes to commit"
fi
- name: Install GitHub CLI
run: |
set -eux
sudo apt-get update
sudo apt-get install -y gh
- name: Authenticate gh (use GITHUB_TOKEN)
run: |
set -euo pipefail
printf '%s' "${{ secrets.GITHUB_TOKEN }}" | gh auth login --with-token
- name: Create/upload releases for packages
shell: bash
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
set -euo pipefail
shopt -s nullglob
for pkg in pkgs/bin/*/*/*.pkg; do
ver_dir=$(dirname "$pkg") # pkgs/bin/mytool/3.0.0
version=$(basename "$ver_dir") # 3.0.0
pkg_dir=$(dirname "$ver_dir") # pkgs/bin/mytool
name=$(basename "$pkg_dir") # mytool
release_tag="${name}-${version}"
echo "Processing $pkg -> release $release_tag"
if gh release view "$release_tag" >/dev/null 2>&1; then
echo "Release $release_tag exists"
else
echo "Creating release $release_tag"
gh release create "$release_tag" --title "$release_tag" --notes "Release for ${name}@${version}" || {
echo "Failed to create release $release_tag"; exit 1;
}
fi
echo "Uploading asset $pkg"
gh release upload "$release_tag" "$pkg" --clobber || {
echo "Failed to upload $pkg to release $release_tag"; exit 1;
}
done
echo "All packages processed."