From c22091cf1e93fab07229fe66d1d58639c366a59e Mon Sep 17 00:00:00 2001
From: fmaccha <fukui@sator.co.jp>
Date: Sat, 17 Feb 2024 15:19:50 +0900
Subject: [PATCH] Update build_release.yaml to support multiple architectures

---
 .github/workflows/build_release.yaml | 54 +++++++++++++++++++---------
 1 file changed, 38 insertions(+), 16 deletions(-)

diff --git a/.github/workflows/build_release.yaml b/.github/workflows/build_release.yaml
index 0730289..b6fba7b 100644
--- a/.github/workflows/build_release.yaml
+++ b/.github/workflows/build_release.yaml
@@ -1,4 +1,4 @@
-name: deploy
+name: build_release
 
 on:
   push:
@@ -7,7 +7,20 @@ on:
 
 jobs:
   build_binary:
-    runs-on: ubuntu-latest
+    name: Build for ${{ matrix.name }}
+    runs-on: ${{ matrix.os }}
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - os: ubuntu-latest
+            name: x86_64
+            tag: x86_64-musl
+            target: x86_64-unknown-linux-musl
+          - os: ubuntu-latest
+            name: arm64
+            tag: aarch64-musl
+            target: aarch64-unknown-linux-musl
     steps:
       - name: "Checkout"
         uses: actions/checkout@v3
@@ -18,17 +31,17 @@ jobs:
         id: cache-builder-image
         uses: actions/cache@v3
         with:
-          path: musl-builder-image-x86_64
-          key: musl-builder-image-x86_64
+          path: musl-builder-image-${{ matrix.name }}
+          key: musl-builder-image-${{ matrix.name }}
 
       - name: "Pull and save builder image"
         if: steps.cache-builder-image.outputs.cache-hit != 'true'
         run: |
-          docker pull messense/rust-musl-cross:x86_64-musl
-          docker save messense/rust-musl-cross:x86_64-musl -o musl-builder-image-x86_64
+          docker pull messense/rust-musl-cross:${{ matrix.tag }}
+          docker save messense/rust-musl-cross:${{ matrix.tag }} -o musl-builder-image-${{ matrix.name }}
 
       - name: "Load builder image"
-        run: docker load -i musl-builder-image-x86_64
+        run: docker load -i musl-builder-image-${{ matrix.name }}
 
       - name: "Cache Rust"
         uses: actions/cache@v3
@@ -39,27 +52,36 @@ jobs:
             ~/.cargo/registry/cache/
             ~/.cargo/git/db/
             target/
-          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
+          key: ${{ matrix.name }}-cargo-${{ hashFiles('**/Cargo.lock') }}
 
       - name: "Build binary"
-        run: docker run --rm -u root -v "$(pwd)":/home/rust/src messense/rust-musl-cross:x86_64-musl cargo build --release
+        run: docker run --rm -u root -v "$(pwd)":/home/rust/src messense/rust-musl-cross:${{ matrix.tag }} cargo build --release
 
       - name: "Upload binary"
         uses: actions/upload-artifact@v3
         with:
-          name: tataki
-          path: target/x86_64-unknown-linux-musl/release/tataki
+          name: tataki-${{ matrix.name }}
+          path: target/${{ matrix.target }}/release/tataki
 
   create_release:
     needs: [build_binary]
+    name: Create release for ${{ matrix.name }}
     runs-on: ubuntu-latest
+    strategy:
+      fail-fast: true
+      matrix:
+        include:
+          - name: x86_64
+          - name: arm64
     steps:
       - name: "Download tataki binary"
         uses: actions/download-artifact@v3
         with:
-          name: tataki
-      - name: "Release"
-        run: gh release --repo ${{ github.repository }} create ${{ github.ref_name }} --title ${{ github.ref_name }} --generate-notes tataki
-        env:
-          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+          name: tataki-${{ matrix.name }}
+      - name: Upload tataki binary
+        uses: svenstaro/upload-release-action@v2
+        with:
+          repo_token: ${{ secrets.GITHUB_TOKEN }}
+          file: tataki-${{ matrix.name }}
+          prerelease: true