forked from NationTech/harmony
96 lines
3.6 KiB
YAML
96 lines
3.6 KiB
YAML
name: Compile and package harmony_composer
|
|
on:
|
|
push:
|
|
branches:
|
|
- master
|
|
|
|
jobs:
|
|
package_harmony_composer:
|
|
container:
|
|
image: hub.nationtech.io/harmony/harmony_composer:latest
|
|
runs-on: dind
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Build for Linux x86_64
|
|
run: cargo build --release --bin harmony_composer --target x86_64-unknown-linux-gnu
|
|
|
|
- name: Build for Windows x86_64 GNU
|
|
run: cargo build --release --bin harmony_composer --target x86_64-pc-windows-gnu
|
|
|
|
- name: Setup log into hub.nationtech.io
|
|
uses: docker/login-action@v3
|
|
with:
|
|
registry: hub.nationtech.io
|
|
username: ${{ secrets.HUB_BOT_USER }}
|
|
password: ${{ secrets.HUB_BOT_PASSWORD }}
|
|
|
|
# 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
|
|
|
|
- name: Build and push
|
|
uses: docker/build-push-action@v6
|
|
with:
|
|
context: .
|
|
push: true
|
|
tags: hub.nationtech.io/harmony/harmony_composer:latest
|