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
 |