From 089f623225a6fa39297e4b8a897e3f4f045085f5 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 28 Sep 2025 22:22:06 +0530 Subject: [PATCH 01/14] feat: PR preview build release --- .github/workflows/pr-preview-build.yml | 75 ++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 .github/workflows/pr-preview-build.yml diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml new file mode 100644 index 0000000..e662b18 --- /dev/null +++ b/.github/workflows/pr-preview-build.yml @@ -0,0 +1,75 @@ +name: PR Preview Build Release Binaries + +on: + pull_request: + +jobs: + build: + name: Build Release Binaries + runs-on: depot-ubuntu-22.04-4 + if: ${{ github.repository_owner == 'coder' }} + + steps: + - uses: actions/checkout@v4 + + - name: Set up Go + uses: actions/setup-go@v5 + with: + go-version: 'stable' + + - name: Set up Bun + uses: oven-sh/setup-bun@v2 + + - name: Install Chat Dependencies + run: cd chat && bun install + + - name: Run make gen and check for unstaged changes + run: | + make gen + ./check_unstaged.sh + + - name: Build and Upload + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + build_variants=( + "linux amd64 agentapi-linux-amd64" + "linux arm64 agentapi-linux-arm64" + "darwin amd64 agentapi-darwin-amd64" + "darwin arm64 agentapi-darwin-arm64" + "windows amd64 agentapi-windows-amd64.exe" + ) + + for variant in "${build_variants[@]}"; do + read -r goos goarch artifact_name <<< "$variant" + + echo "Building for GOOS=$goos GOARCH=$goarch..." + CGO_ENABLED=0 GOOS=$goos GOARCH=$goarch BINPATH="out/$artifact_name" make build + done + + - name: Upload Build Artifact + if: ${{ inputs.create-artifact }} + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 + with: + name: agentapi-build + path: ${{ github.workspace }}/out + retention-days: 7 + + - name: Create or Update PR Release + if: ${{ github.event.action != 'closed' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: 'agentapi_'${{ github.event.pull_request.number }} + + run: gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber + + - name: Delete PR Release on Close + if: ${{ github.event.action == 'closed' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: 'agentapi_'${{ github.event.pull_request.number }} + run: | + TAG="agentapi_${PR_NUMBER}" + echo "Deleting release and tag $TAG..." + gh release delete "$RELEASE_TAG" --cleanup-tag --yes \ No newline at end of file From fdc55eda4c5921ba0dc89e2646a1a456b33fdc28 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 28 Sep 2025 22:29:56 +0530 Subject: [PATCH 02/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index e662b18..8c439f3 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -69,7 +69,4 @@ jobs: env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_TAG: 'agentapi_'${{ github.event.pull_request.number }} - run: | - TAG="agentapi_${PR_NUMBER}" - echo "Deleting release and tag $TAG..." - gh release delete "$RELEASE_TAG" --cleanup-tag --yes \ No newline at end of file + run: gh release delete "$RELEASE_TAG" --cleanup-tag --yes \ No newline at end of file From 6f9a6338ac67f97f9c74f53c8b260386f4250b0d Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 28 Sep 2025 22:32:39 +0530 Subject: [PATCH 03/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 8c439f3..c1b3812 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -7,7 +7,6 @@ jobs: build: name: Build Release Binaries runs-on: depot-ubuntu-22.04-4 - if: ${{ github.repository_owner == 'coder' }} steps: - uses: actions/checkout@v4 From 2ebfedef43c24c0e68188d2d224ba73e756e7dfc Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Sun, 28 Sep 2025 22:36:58 +0530 Subject: [PATCH 04/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index c1b3812..ca21dbe 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -48,7 +48,6 @@ jobs: done - name: Upload Build Artifact - if: ${{ inputs.create-artifact }} uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: name: agentapi-build @@ -59,7 +58,7 @@ jobs: if: ${{ github.event.action != 'closed' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_TAG: 'agentapi_'${{ github.event.pull_request.number }} + RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' run: gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber @@ -67,5 +66,5 @@ jobs: if: ${{ github.event.action == 'closed' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_TAG: 'agentapi_'${{ github.event.pull_request.number }} + RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' run: gh release delete "$RELEASE_TAG" --cleanup-tag --yes \ No newline at end of file From 2d9743f2ee67d0d5b8ae35e85fd60803887e2507 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 13:48:56 +0530 Subject: [PATCH 05/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index ca21dbe..d2e0f10 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -60,7 +60,18 @@ jobs: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' - run: gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber + run: | + + # Check if release exists + if gh release view "$TAG" &>/dev/null; then + echo "Updating release $RELEASE_TAG" + gh release upload "$RELEASE_TAG" out/* --clobber + else + echo "Creating release $RELEASE_TAG" + gh release create "$RELEASE_TAG" out/* \ + --title "$RELEASE_TAG" \ + --notes "Preview release for PR #${PR_NUMBER}" + fi - name: Delete PR Release on Close if: ${{ github.event.action == 'closed' }} From 1122e8151bc88457e805d21e5188ecbd33036819 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 13:51:58 +0530 Subject: [PATCH 06/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index d2e0f10..37943f5 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -63,7 +63,7 @@ jobs: run: | # Check if release exists - if gh release view "$TAG" &>/dev/null; then + if gh release view "$RELEASE_TAG" &>/dev/null; then echo "Updating release $RELEASE_TAG" gh release upload "$RELEASE_TAG" out/* --clobber else From 58a954328e33edd0c8d9bf01e103f14f85e28f78 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 13:56:29 +0530 Subject: [PATCH 07/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 37943f5..b7efb28 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -61,14 +61,13 @@ jobs: RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' run: | - # Check if release exists if gh release view "$RELEASE_TAG" &>/dev/null; then echo "Updating release $RELEASE_TAG" - gh release upload "$RELEASE_TAG" out/* --clobber + gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber else echo "Creating release $RELEASE_TAG" - gh release create "$RELEASE_TAG" out/* \ + gh release create "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* \ --title "$RELEASE_TAG" \ --notes "Preview release for PR #${PR_NUMBER}" fi From 6c04c8b8de465d274efd6dc265236b85ee416f06 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 14:00:31 +0530 Subject: [PATCH 08/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index b7efb28..1460efd 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -3,6 +3,9 @@ name: PR Preview Build Release Binaries on: pull_request: +permissions: + contents: write + jobs: build: name: Build Release Binaries From 6b7b73945d808bb30b19e32fcb76308467cd65ce Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 14:11:57 +0530 Subject: [PATCH 09/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 1460efd..78cac45 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -3,13 +3,13 @@ name: PR Preview Build Release Binaries on: pull_request: -permissions: - contents: write jobs: build: name: Build Release Binaries runs-on: depot-ubuntu-22.04-4 + permissions: + contents: write steps: - uses: actions/checkout@v4 From 4f5d8bde3f1dd0427bac6fabe7aebf366bb38035 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 14:19:12 +0530 Subject: [PATCH 10/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 78cac45..3cd4443 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -1,8 +1,8 @@ name: PR Preview Build Release Binaries on: - pull_request: - + pull_request_target: + types: [opened, synchronize, reopened, closed] jobs: build: From 45ae559d3fd6f52814e977e09104505a27786b5d Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 14:51:10 +0530 Subject: [PATCH 11/14] feat: breakdown --- .github/workflows/pr-preview-build.yml | 33 ++++-------- .github/workflows/pr-preview-cleanup.yml | 21 ++++++++ .github/workflows/pr-preview-release.yml | 69 ++++++++++++++++++++++++ 3 files changed, 99 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/pr-preview-cleanup.yml create mode 100644 .github/workflows/pr-preview-release.yml diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 3cd4443..56dcb85 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -1,8 +1,7 @@ name: PR Preview Build Release Binaries on: - pull_request_target: - types: [opened, synchronize, reopened, closed] + pull_request: jobs: build: @@ -57,27 +56,13 @@ jobs: path: ${{ github.workspace }}/out retention-days: 7 - - name: Create or Update PR Release - if: ${{ github.event.action != 'closed' }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' - + - name: Save PR number run: | - # Check if release exists - if gh release view "$RELEASE_TAG" &>/dev/null; then - echo "Updating release $RELEASE_TAG" - gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber - else - echo "Creating release $RELEASE_TAG" - gh release create "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* \ - --title "$RELEASE_TAG" \ - --notes "Preview release for PR #${PR_NUMBER}" - fi + mkdir -p ./pr + echo ${{ github.event.pull_request.number }} > ./pr/number - - name: Delete PR Release on Close - if: ${{ github.event.action == 'closed' }} - env: - GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' - run: gh release delete "$RELEASE_TAG" --cleanup-tag --yes \ No newline at end of file + - name: Upload PR number + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 + with: + name: pr-number + path: pr/ \ No newline at end of file diff --git a/.github/workflows/pr-preview-cleanup.yml b/.github/workflows/pr-preview-cleanup.yml new file mode 100644 index 0000000..ba7ced5 --- /dev/null +++ b/.github/workflows/pr-preview-cleanup.yml @@ -0,0 +1,21 @@ +name: PR Preview Cleanup + +on: + pull_request: + types: [closed] + +permissions: + contents: write + +jobs: + cleanup: + name: Delete PR Release + runs-on: ubuntu-latest + + steps: + - name: Delete PR Release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' + run: | + gh release delete "$RELEASE_TAG" --cleanup-tag --yes --repo ${{ github.repository }} || true \ No newline at end of file diff --git a/.github/workflows/pr-preview-release.yml b/.github/workflows/pr-preview-release.yml new file mode 100644 index 0000000..6effd72 --- /dev/null +++ b/.github/workflows/pr-preview-release.yml @@ -0,0 +1,69 @@ +name: PR Preview Release + +on: + workflow_run: + workflows: ["PR Preview Build"] + types: + - completed + +permissions: + contents: write + pull-requests: write + +jobs: + release: + name: Create Release + runs-on: ubuntu-latest + if: ${{ github.event.workflow_run.conclusion == 'success' }} + + steps: + - name: Download PR number + uses: actions/download-artifact@v4 + with: + name: pr-number + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + + - name: Read PR number + id: pr + run: echo "number=$(cat number)" >> $GITHUB_OUTPUT + + - name: Download Build Artifacts + uses: actions/download-artifact@v4 + with: + name: agentapi-build-${{ steps.pr.outputs.number }} + path: ./out + github-token: ${{ secrets.GITHUB_TOKEN }} + run-id: ${{ github.event.workflow_run.id }} + + + - name: Create or Update PR Release + if: ${{ github.event.action != 'closed' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' + + run: | + # Check if release exists + if gh release view "$RELEASE_TAG" &>/dev/null; then + echo "Updating release $RELEASE_TAG" + gh release upload "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* --clobber + else + echo "Creating release $RELEASE_TAG" + gh release create "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* \ + --title "$RELEASE_TAG" \ + --notes "Preview release for PR #${PR_NUMBER}" + fi + + - name: Comment on PR + uses: actions/github-script@v7 + with: + script: | + const prNumber = ${{ steps.pr.outputs.number }}; + const releaseTag = `agentapi_${prNumber}`; + github.rest.issues.createComment({ + issue_number: prNumber, + owner: context.repo.owner, + repo: context.repo.repo, + body: `✅ Preview binaries are ready!\n\nTo test with modules: \`\`\`agentapi: ${prNumber}\`\`\` or download from: ${repoUrl}/releases/tag/${releaseTag}` + }); \ No newline at end of file From cd656aafeb76d95b3569af7e3f078e52b72c5bef Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 14:58:10 +0530 Subject: [PATCH 12/14] chore: minor fixes --- .github/workflows/pr-preview-release.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/pr-preview-release.yml b/.github/workflows/pr-preview-release.yml index 6effd72..2697f26 100644 --- a/.github/workflows/pr-preview-release.yml +++ b/.github/workflows/pr-preview-release.yml @@ -38,7 +38,6 @@ jobs: - name: Create or Update PR Release - if: ${{ github.event.action != 'closed' }} env: GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} RELEASE_TAG: 'agentapi_${{ github.event.pull_request.number }}' From c01d3349aa68424d90d45d9fbcb0882e69a6876c Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 15:18:13 +0530 Subject: [PATCH 13/14] chore: minor fixes --- .github/workflows/pr-preview-release.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/pr-preview-release.yml b/.github/workflows/pr-preview-release.yml index 2697f26..4f20312 100644 --- a/.github/workflows/pr-preview-release.yml +++ b/.github/workflows/pr-preview-release.yml @@ -51,7 +51,8 @@ jobs: echo "Creating release $RELEASE_TAG" gh release create "$RELEASE_TAG" "$GITHUB_WORKSPACE"/out/* \ --title "$RELEASE_TAG" \ - --notes "Preview release for PR #${PR_NUMBER}" + --notes "Preview release for PR #${PR_NUMBER}" \ + --draft --latest=false fi - name: Comment on PR From ea282cb890240cc4800a232ae48cc480025780b6 Mon Sep 17 00:00:00 2001 From: 35C4n0r Date: Mon, 29 Sep 2025 22:11:50 +0530 Subject: [PATCH 14/14] chore: minor fixes --- .github/workflows/pr-preview-build.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-preview-build.yml b/.github/workflows/pr-preview-build.yml index 56dcb85..5608198 100644 --- a/.github/workflows/pr-preview-build.yml +++ b/.github/workflows/pr-preview-build.yml @@ -1,4 +1,4 @@ -name: PR Preview Build Release Binaries +name: PR Preview Release Binaries on: pull_request: @@ -29,7 +29,7 @@ jobs: make gen ./check_unstaged.sh - - name: Build and Upload + - name: Build env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} shell: bash @@ -52,7 +52,7 @@ jobs: - name: Upload Build Artifact uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 with: - name: agentapi-build + name: agentapi-preview-build path: ${{ github.workspace }}/out retention-days: 7