diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f73c67e..0c77e38 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -14,7 +14,8 @@ on: env: HASH_FILENAME_WINDOWS: ucrtool-windows.hash HASH_FILENAME_MAC: ucrtool-macos.hash - HASH_FILENAME: ucrtool-ubuntu.hash + HASH_FILENAME_LINUX_AMD64: ucrtool-linux-amd64.hash + HASH_FILENAME_LINUX_ARM64: ucrtool-linux-arm64.hash jobs: build-windows: @@ -177,11 +178,19 @@ jobs: retention-days: 3 build-ubuntu: - runs-on: ubuntu-latest + runs-on: ${{ matrix.runs-on }} environment: Ubuntu strategy: matrix: - node-version: [ '22.x'] + include: + - runs-on: ubuntu-latest + node-version: '22.x' + arch: amd64 + docker-platform: linux/amd64 + - runs-on: ubuntu-24.04-arm64 + node-version: '22.x' + arch: arm64 + docker-platform: linux/arm64 steps: - name: Checkout @@ -244,8 +253,9 @@ jobs: uses: docker/build-push-action@v6 with: context: . + platforms: ${{ matrix.docker-platform }} push: true - tags: ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:latest + tags: ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:${{ matrix.arch }}-latest - name: Prepare artifacts shell: bash @@ -253,7 +263,7 @@ jobs: mkdir -p artifacts cp server/ucrtool-server artifacts/ cp -r server/public artifacts/ - echo "ARTIFACT_NAME=ucrtool-${{ env.VERSION }}-aarch64" >> $GITHUB_ENV + echo "ARTIFACT_NAME=ucrtool-${{ env.VERSION }}-linux-${{ matrix.arch }}" >> $GITHUB_ENV - name: Create upload artifact shell: bash @@ -272,6 +282,33 @@ jobs: # npx postject server NODE_SEA_BLOB sea-prep.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2 + docker-manifest: + name: Publish Docker multi-arch latest + runs-on: ubuntu-latest + needs: [build-ubuntu] + + steps: + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Create and push multi-arch latest manifest + run: | + docker buildx imagetools create \ + --tag ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:latest \ + ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:amd64-latest \ + ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:arm64-latest + + - name: Inspect multi-arch latest manifest + run: | + docker buildx imagetools inspect ${{ secrets.DOCKERHUB_USERNAME }}/uc-tool:latest + + release: name: Create Release @@ -307,10 +344,11 @@ jobs: run: | # append timestamp for filename in *.zip; do mv $filename "$(basename $filename .zip)-${{ env.TIMESTAMP }}.zip"; done; - for filename in *.zip; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_WINDOWS }}; done; - for filename in *aarch64.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME }}; done; - for filename in *macos.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_MAC }}; done; for filename in *.tar.gz; do mv $filename "$(basename $filename .tar.gz)-${{ env.TIMESTAMP }}.tar.gz"; done; + for filename in *.zip; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_WINDOWS }}; done; + for filename in *linux-amd64*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_LINUX_AMD64 }}; done; + for filename in *linux-arm64*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_LINUX_ARM64 }}; done; + for filename in *macos*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_MAC }}; done; - name: Create Pre-Release uses: "marvinpinto/action-automatic-releases@latest" @@ -324,13 +362,17 @@ jobs: *.zip *.tar.gz ${{ env.HASH_FILENAME_WINDOWS }} - ${{ env.HASH_FILENAME }} + ${{ env.HASH_FILENAME_LINUX_AMD64 }} + ${{ env.HASH_FILENAME_LINUX_ARM64 }} + ${{ env.HASH_FILENAME_MAC }} - name: Create GitHub release archives if: "contains(github.ref, 'tags/v')" run: | for filename in *.zip; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_WINDOWS }}; done; - for filename in *.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME }}; done; + for filename in *linux-amd64*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_LINUX_AMD64 }}; done; + for filename in *linux-arm64*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_LINUX_ARM64 }}; done; + for filename in *macos*.tar.gz; do echo "sha256 `sha256sum $filename`" >> ${{ env.HASH_FILENAME_MAC }}; done; - name: Create Release uses: "marvinpinto/action-automatic-releases@latest" @@ -342,5 +384,6 @@ jobs: *.tar.gz *.zip ${{ env.HASH_FILENAME_WINDOWS }} - ${{ env.HASH_FILENAME }} + ${{ env.HASH_FILENAME_LINUX_AMD64 }} + ${{ env.HASH_FILENAME_LINUX_ARM64 }} ${{ env.HASH_FILENAME_MAC }}