name: Release on: push: tags: - "*" permissions: contents: write packages: write jobs: check: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Install nix uses: cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - name: Use cachix uses: cachix/cachix-action@v16 with: name: trevstack authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - run: nix flake check release: runs-on: ubuntu-latest needs: check steps: - uses: actions/checkout@v4 - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}" - run: > nix build .#trevstack-linux-amd64 .#trevstack-linux-arm64 .#trevstack-linux-arm .#trevstack-windows-amd64 .#trevstack-darwin-amd64 .#trevstack-darwin-arm64 - uses: softprops/action-gh-release@v2 with: generate_release_notes: true files: |- result*/bin/* package: runs-on: ubuntu-latest needs: release steps: - uses: actions/checkout@v4 - name: Install nix uses: cachix/install-nix-action@v31 with: nix_path: nixpkgs=channel:nixos-unstable - name: Use cachix uses: cachix/cachix-action@v16 with: name: trevstack authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build & load images run: | nix build .#trevstack-linux-amd64-image && ./result | docker load nix build .#trevstack-linux-arm64-image && ./result | docker load nix build .#trevstack-linux-arm-image && ./result | docker load - name: Set env shell: bash run: | REGISTRY=$(basename ${{ github.server_url }}) NR=${{ github.repository }} NAMESPACE="${NR%%/*}" REPOSITORY="${NR##*/}" TAG=${{ github.ref_name }} VERSION=${TAG#v} echo "REGISTRY=${REGISTRY}" >> $GITHUB_ENV echo "NAMESPACE=${NAMESPACE}" >> $GITHUB_ENV echo "REPOSITORY=${REPOSITORY}" >> $GITHUB_ENV echo "VERSION=${VERSION}" >> $GITHUB_ENV - name: Push images shell: bash run: | docker image tag $REPOSITORY:$VERSION-amd64 $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 docker image tag $REPOSITORY:$VERSION-arm64 $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 docker image tag $REPOSITORY:$VERSION-arm $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm - name: Push manifest shell: bash run: | docker manifest create $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 --arch amd64 docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 --arch arm64 docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm --arch arm docker manifest push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION docker manifest create $REGISTRY/$NAMESPACE/$REPOSITORY:latest \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 \ $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 --arch amd64 docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 --arch arm64 docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm --arch arm