From 908a4e5181d0759187ac94425f0ca232a382ee3f Mon Sep 17 00:00:00 2001 From: Jean-Gabriel Gill-Couture Date: Tue, 24 Jun 2025 16:05:27 -0400 Subject: [PATCH] feat: Publishing a release of harmony composer binary as latest-snapshot This allows users to run the latest build of harmony_composer any time with a single curl command that does not change. While not the most standard solution, it is very practical and acceptable in the context of a `latest-snapshot` tag --- .gitea/workflows/harmony_composer.yaml | 63 +++++++++++++++++++++++--- 1 file changed, 56 insertions(+), 7 deletions(-) diff --git a/.gitea/workflows/harmony_composer.yaml b/.gitea/workflows/harmony_composer.yaml index 6c7bc0f..fbb809b 100644 --- a/.gitea/workflows/harmony_composer.yaml +++ b/.gitea/workflows/harmony_composer.yaml @@ -19,13 +19,6 @@ jobs: - name: Build for Windows x86_64 GNU run: cargo build --release --bin harmony_composer --target x86_64-pc-windows-gnu - - uses: actions/upload-artifact@v3 - with: - name: binaries - path: | - target/x86_64-unknown-linux-gnu/release/harmony_composer - target/x86_64-pc-windows-gnu/release/harmony_composer.exe - - name: Setup log into hub.nationtech.io uses: docker/login-action@v3 with: @@ -35,6 +28,62 @@ jobs: # TODO: build ARM images and MacOS binaries (or other targets) too + - name: Update snapshot-latest tag + run: | + git config user.name "Gitea CI" + git config user.email "ci@nationtech.io" + git tag -f snapshot-latest + git push origin snapshot-latest --force + + - name: Install jq + run: apt install -y jq # The current image includes apt lists so we don't have to apt update and rm /var/lib/apt... every time. But if the image is optimized it won't work anymore + + - name: Create or update release + run: | + # First, check if release exists and delete it if it does + RELEASE_ID=$(curl -s -X GET \ + -H "Authorization: token ${{ secrets.GITEATOKEN }}" \ + "https://git.nationtech.io/api/v1/repos/nationtech/harmony/releases/tags/snapshot-latest" \ + | jq -r '.id // empty') + + if [ -n "$RELEASE_ID" ]; then + # Delete existing release + curl -X DELETE \ + -H "Authorization: token ${{ secrets.GITEATOKEN }}" \ + "https://git.nationtech.io/api/v1/repos/nationtech/harmony/releases/$RELEASE_ID" + fi + + # Create new release + RESPONSE=$(curl -X POST \ + -H "Authorization: token ${{ secrets.GITEATOKEN }}" \ + -H "Content-Type: application/json" \ + -d '{ + "tag_name": "snapshot-latest", + "name": "Latest Snapshot", + "body": "Automated snapshot build from master branch", + "draft": false, + "prerelease": true + }' \ + "https://git.nationtech.io/api/v1/repos/nationtech/harmony/releases") + + echo "RELEASE_ID=$(echo $RESPONSE | jq -r '.id')" >> $GITHUB_ENV + + - name: Upload Linux binary + run: | + curl -X POST \ + -H "Authorization: token ${{ secrets.GITEATOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@target/x86_64-unknown-linux-gnu/release/harmony_composer" \ + "https://git.nationtech.io/api/v1/repos/nationtech/harmony/releases/${{ env.RELEASE_ID }}/assets?name=harmony_composer" + + - name: Upload Windows binary + run: | + curl -X POST \ + -H "Authorization: token ${{ secrets.GITEATOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary "@target/x86_64-pc-windows-gnu/release/harmony_composer.exe" \ + "https://git.nationtech.io/api/v1/repos/nationtech/harmony/releases/${{ env.RELEASE_ID }}/assets?name=harmony_composer.exe" + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3