diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 7b4de2ca7..ae6895391 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -24,16 +24,19 @@ jobs:
       fail-fast: false
       matrix:
         include:
-          - { os: ubuntu-22.04,   target: linux,   platform: linux-x64,   container: 'alpine:latest', libc: musl }
-          - { os: ubuntu-20.04,   target: linux,   platform: linux-x64    }
-          - { os: ubuntu-20.04,   target: linux,   platform: linux-arm64  }
-          - { os: macos-latest,   target: darwin,  platform: darwin-x64   }
-          - { os: macos-latest,   target: darwin,  platform: darwin-arm64 }
-          - { os: windows-latest, target: windows, platform: win32-ia32   }
-          - { os: windows-latest, target: windows, platform: win32-x64    }
+          - { os: ubuntu-22.04,       target: linux,   platform: linux-x64,   container: 'alpine:latest', libc: musl }
+          - { os: ubuntu-20.04,       target: linux,   platform: linux-x64    }
+          - { os: ubuntu-20.04,       target: linux,   platform: linux-arm64  }
+          - { os: ubuntu-22.04-arm,   target: linux,   platform: linux-arm64, container: 'alpine:latest', libc: musl }
+          - { os: macos-latest,       target: darwin,  platform: darwin-x64   }
+          - { os: macos-latest,       target: darwin,  platform: darwin-arm64 }
+          - { os: windows-latest,     target: windows, platform: win32-ia32   }
+          - { os: windows-latest,     target: windows, platform: win32-x64    }
     runs-on: ${{ matrix.os }}
     container:
       image: ${{ matrix.container }}
+      volumes:
+        - /:/host
     steps:
       - name: Install aarch64-linux-gnu
         if: ${{ matrix.platform == 'linux-arm64' && matrix.libc != 'musl' }}
@@ -47,6 +50,15 @@ jobs:
           apk update
           apk add git ninja bash build-base nodejs linux-headers
 
+      - name: Prepare container for linux-arm64-musl platform
+        if: ${{ matrix.platform == 'linux-arm64' && matrix.libc == 'musl' }}
+        run: |
+          # workaround to support javascript actions in alpine arm64.
+          # https://github.com/actions/runner/issues/801#issuecomment-2394425757
+          sed -i "s:ID=alpine:ID=NotpineForGHA:" /etc/os-release
+          cd /host/home/runner/runners/*/externals/
+          rm -rf node20/* && mkdir node20/bin && ln -s /usr/bin/node node20/bin/node
+
       - name: Prepare for Linux
         if: ${{ matrix.target == 'linux' && matrix.libc != 'musl' }}
         run: |
@@ -61,8 +73,8 @@ jobs:
         if: ${{ matrix.target == 'windows' }}
         run: .\make.bat ${{ matrix.platform }}
 
-      - name: Build for Linux
-        if: ${{ matrix.target == 'linux' }}
+      - name: Build for Linux except linux-arm64-musl
+        if: ${{ matrix.target == 'linux' && !(matrix.platform == 'linux-arm64' && matrix.libc == 'musl') }}
         run: |
           ./make.sh ${{ matrix.platform }}
           
@@ -78,6 +90,12 @@ jobs:
           docker build -t ubuntu-18.04 .
           docker run --rm -v $(pwd):$(pwd) -w $(pwd) ubuntu-18.04 bash -c './make.sh'
 
+      - name: Build for linux-arm64-musl
+        if: ${{ matrix.platform == 'linux-arm64' && matrix.libc == 'musl' }}
+        run: |
+          ninja -C 3rd/luamake -f compile/ninja/linux.ninja
+          ./3rd/luamake/luamake all
+
       - name: Setting up workflow variables
         id: vars
         shell: bash
diff --git a/changelog.md b/changelog.md
index 454301b2e..2acbe659d 100644
--- a/changelog.md
+++ b/changelog.md
@@ -3,6 +3,7 @@
 ## Unreleased
 <!-- Add all new changes here. They will be moved under a version at release -->
 * `FIX` incorrect argument skip pattern for `--check_out_path=`, which incorrectly skips the next argument
+* `NEW` Build and publish package for `linux-arm64-musl`.
 
 ## 3.13.6
 `2025-2-6`