From 92a0a26251c88d404b70df499cdb7c43214b63db Mon Sep 17 00:00:00 2001 From: sanasol Date: Fri, 20 Feb 2026 00:59:44 +0100 Subject: [PATCH] ci: fix Forgejo Actions compatibility - Remove upload-artifact/download-artifact (not supported on Forgejo) - Each build job uploads directly to release via API - Add `rpm` package to Linux build dependencies - Remove separate release job, replaced by create-release + per-job upload - Remove arch build job entirely Co-Authored-By: Claude Opus 4.6 --- .github/workflows/release.yml | 164 ++++++++++++---------------------- 1 file changed, 55 insertions(+), 109 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 1fc61dc..e2c235a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,7 +7,22 @@ on: workflow_dispatch: jobs: + create-release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: Create Draft Release + run: | + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${{ github.ref_name }}\",\"name\":\"${{ github.ref_name }}\",\"body\":\"Release ${{ github.ref_name }}\",\"draft\":true,\"prerelease\":false}" \ + -o release.json + cat release.json + echo "RELEASE_ID=$(cat release.json | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])')" >> $GITHUB_ENV + build-windows: + needs: [create-release] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -22,149 +37,80 @@ jobs: - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build Windows Packages run: npx electron-builder --win --publish never - - uses: actions/upload-artifact@v4 - with: - name: windows-builds - path: | - dist/*.exe - dist/*.exe.blockmap - dist/latest.yml + + - name: Upload to Release + run: | + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.exe dist/*.exe.blockmap dist/latest.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done build-macos: + needs: [create-release] runs-on: macos-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build macOS Packages env: - # Code signing CSC_LINK: ${{ secrets.CSC_LINK }} CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - # Notarization APPLE_ID: ${{ secrets.APPLE_ID }} APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }} APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} run: npx electron-builder --mac --publish never - - uses: actions/upload-artifact@v4 - with: - name: macos-builds - path: | - dist/*.dmg - dist/*.zip - dist/*.blockmap - dist/latest-mac.yml + + - name: Upload to Release + run: | + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.dmg dist/*.zip dist/*.blockmap dist/latest-mac.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done build-linux: + needs: [create-release] runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install build dependencies run: | sudo apt-get update - sudo apt-get install -y libarchive-tools - + sudo apt-get install -y libarchive-tools rpm + - uses: actions/setup-node@v4 with: node-version: '22' - cache: 'npm' - run: npm ci - name: Build Linux Packages + run: npx electron-builder --linux AppImage deb rpm --publish never + + - name: Upload to Release run: | - npx electron-builder --linux AppImage deb rpm --publish never - - uses: actions/upload-artifact@v4 - with: - name: linux-builds - path: | - dist/*.AppImage - dist/*.AppImage.blockmap - dist/*.deb - dist/*.rpm - dist/latest-linux.yml - - # build-arch: - # runs-on: ubuntu-latest - # container: - # image: archlinux:latest - # steps: - # - name: Checkout repository - # uses: actions/checkout@v4 - # with: - # fetch-depth: 0 - # - name: Install base packages - # run: | - # pacman -Syu --noconfirm - # pacman -S --noconfirm base-devel git nodejs npm rpm-tools libxcrypt-compat - # - name: Create build user - # run: | - # useradd -m builder - # echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers - # - name: Fix Permissions - # run: chown -R builder:builder . - # - name: Build Arch Package - # run: | - # sudo -u builder bash << 'EOF' - # set -e - # makepkg --printsrcinfo > .SRCINFO - # makepkg -s --noconfirm - # EOF - # - name: Fix permissions for upload - # if: always() - # run: sudo chown -R $(id -u):$(id -g) . - # - name: Upload Arch Package - # uses: actions/upload-artifact@v4 - # with: - # name: arch-package - # path: | - # *.pkg.tar.zst - # .SRCINFO - # include-hidden-files: true - - release: - needs: [build-windows, build-macos, build-linux] - runs-on: ubuntu-latest - if: | - startsWith(github.ref, 'refs/tags/v') || - github.ref == 'refs/heads/main' || - github.event_name == 'workflow_dispatch' - - permissions: - contents: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Download all artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts - - - name: Display structure of downloaded files - run: ls -R artifacts - - - name: Get version from package.json - id: pkg_version - run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - - - name: Create Release - uses: actions/forgejo-release@v2 - with: - tag: ${{ github.ref_name }} - direction: upload - url: https://git.sanhost.net - token: ${{ secrets.RELEASE_TOKEN }} - release-dir: artifacts - release-notes: "Release ${{ github.ref_name }}" - prerelease: false - + RELEASE_ID=$(curl -s "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/tags/${{ github.ref_name }}" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" | python3 -c 'import sys,json; print(json.load(sys.stdin)["id"])') + for file in dist/*.AppImage dist/*.AppImage.blockmap dist/*.deb dist/*.rpm dist/latest-linux.yml; do + [ -f "$file" ] || continue + echo "Uploading $file..." + curl -s -X POST "https://git.sanhost.net/api/v1/repos/${GITHUB_REPOSITORY}/releases/${RELEASE_ID}/assets?name=$(basename $file)" \ + -H "Authorization: token ${{ secrets.RELEASE_TOKEN }}" \ + -F "attachment=@${file}" || echo "Failed to upload $file" + done