From bc878c8f93220aeead3180ca1864f568894f715f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 4 Apr 2026 15:47:50 -0400 Subject: [PATCH 1/2] Add remote workflow used by automated Cloudflare release script --- .../workflows/remote-release-platforms.yml | 168 ++++++++++++++++++ 1 file changed, 168 insertions(+) create mode 100644 .github/workflows/remote-release-platforms.yml diff --git a/.github/workflows/remote-release-platforms.yml b/.github/workflows/remote-release-platforms.yml new file mode 100644 index 00000000..4cafe4a8 --- /dev/null +++ b/.github/workflows/remote-release-platforms.yml @@ -0,0 +1,168 @@ +name: Remote Release Platforms + +on: + workflow_dispatch: + inputs: + release_tag: + description: Draft GitHub release tag used as the transport bucket + required: true + type: string + release_title: + description: Human-readable title for the draft release + required: false + type: string + +concurrency: + group: remote-release-${{ github.ref }}-${{ inputs.release_tag }} + cancel-in-progress: false + +env: + PNPM_VERSION: "10.24.0" + NODE_VERSION: "22" + +jobs: + build-windows: + name: Windows Universal Installer + runs-on: windows-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: ${{ env.PNPM_VERSION }} + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Build electron-vite + run: pnpm exec electron-vite build + - name: Package + run: pnpm exec electron-builder --win --x64 --ia32 --arm64 --config electron-builder.yml --publish never + env: + CSC_LINK: ${{ secrets.WIN_CERTIFICATE_P12_BASE64 }} + CSC_KEY_PASSWORD: ${{ secrets.WIN_CERTIFICATE_PASSWORD }} + - name: Upload release files + shell: bash + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + RELEASE_TITLE: ${{ inputs.release_title }} + run: | + set -euo pipefail + gh release view "$RELEASE_TAG" >/dev/null 2>&1 || \ + gh release create "$RELEASE_TAG" \ + --draft \ + --prerelease \ + --title "${RELEASE_TITLE:-Remote Release $GITHUB_RUN_ID}" \ + --notes "Temporary release transport generated by remote-release-platforms.yml." \ + --target "$GITHUB_SHA" + + shopt -s nullglob + files=( + build/release/*.exe + build/release/*.blockmap + build/release/latest.yml + ) + if [ ${#files[@]} -eq 0 ]; then + echo "No Windows release files found." + exit 1 + fi + + gh release upload "$RELEASE_TAG" "${files[@]}" --clobber + + build-linux-x64: + name: Linux x64 + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: ${{ env.PNPM_VERSION }} + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Build electron-vite + run: pnpm exec electron-vite build + - name: Package + run: pnpm exec electron-builder --linux --x64 --config electron-builder.yml --publish never + - name: Upload release files + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + RELEASE_TITLE: ${{ inputs.release_title }} + run: | + set -euo pipefail + gh release view "$RELEASE_TAG" >/dev/null 2>&1 || \ + gh release create "$RELEASE_TAG" \ + --draft \ + --prerelease \ + --title "${RELEASE_TITLE:-Remote Release $GITHUB_RUN_ID}" \ + --notes "Temporary release transport generated by remote-release-platforms.yml." \ + --target "$GITHUB_SHA" + + shopt -s nullglob + files=( + build/release/*.AppImage + build/release/*.deb + build/release/*.rpm + build/release/latest-linux.yml + ) + if [ ${#files[@]} -eq 0 ]; then + echo "No Linux x64 release files found." + exit 1 + fi + + gh release upload "$RELEASE_TAG" "${files[@]}" --clobber + + build-linux-arm64: + name: Linux arm64 + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - uses: actions/checkout@v4 + - uses: pnpm/action-setup@v4 + with: + version: ${{ env.PNPM_VERSION }} + - uses: actions/setup-node@v4 + with: + node-version: ${{ env.NODE_VERSION }} + cache: pnpm + - run: pnpm install --frozen-lockfile + - name: Build electron-vite + run: pnpm exec electron-vite build + - name: Package + run: pnpm exec electron-builder --linux --arm64 --config electron-builder.yml --publish never + - name: Upload release files + env: + GH_TOKEN: ${{ github.token }} + RELEASE_TAG: ${{ inputs.release_tag }} + RELEASE_TITLE: ${{ inputs.release_title }} + run: | + set -euo pipefail + gh release view "$RELEASE_TAG" >/dev/null 2>&1 || \ + gh release create "$RELEASE_TAG" \ + --draft \ + --prerelease \ + --title "${RELEASE_TITLE:-Remote Release $GITHUB_RUN_ID}" \ + --notes "Temporary release transport generated by remote-release-platforms.yml." \ + --target "$GITHUB_SHA" + + shopt -s nullglob + files=( + build/release/*arm64*.AppImage + build/release/*arm64*.deb + build/release/*aarch64*.rpm + ) + if [ ${#files[@]} -eq 0 ]; then + echo "No Linux arm64 release files found." + exit 1 + fi + + gh release upload "$RELEASE_TAG" "${files[@]}" --clobber From 42bb2f196ffbd716e38d7004c68d37b2bd5df624 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B7=E7=94=B5=E8=8A=BD=E8=A1=A3?= Date: Sat, 4 Apr 2026 16:19:37 -0400 Subject: [PATCH 2/2] Tighten Linux x64 upload globs in the remote release workflow Constraint: Linux arm64 assets and x64 assets share the same draft release transport bucket Rejected: Broad *.AppImage/*.deb/*.rpm globs | x64 upload step collided with arm64 assets and failed the workflow Confidence: high Scope-risk: narrow Directive: Keep per-architecture upload globs disjoint whenever multiple jobs share one draft release Tested: Prior run proved packaging succeeded and isolated the failure to the x64 upload selection Not-tested: Updated workflow dispatch before rerun --- .github/workflows/remote-release-platforms.yml | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/.github/workflows/remote-release-platforms.yml b/.github/workflows/remote-release-platforms.yml index 4cafe4a8..06276e18 100644 --- a/.github/workflows/remote-release-platforms.yml +++ b/.github/workflows/remote-release-platforms.yml @@ -107,10 +107,15 @@ jobs: --target "$GITHUB_SHA" shopt -s nullglob - files=( - build/release/*.AppImage - build/release/*.deb - build/release/*.rpm + files=() + for file in build/release/AgentCompany-*.AppImage; do + if [[ "$file" != *arm64* ]]; then + files+=("$file") + fi + done + files+=( + build/release/agent-company_*_amd64.deb + build/release/agent-company-*.x86_64.rpm build/release/latest-linux.yml ) if [ ${#files[@]} -eq 0 ]; then