|
1 | | -name: Release |
| 1 | +name: Publish Docker Image |
2 | 2 |
|
3 | 3 | on: |
4 | 4 | push: |
5 | 5 | tags: |
6 | 6 | - "v*" |
7 | 7 | branches: |
8 | 8 | - main |
9 | | - |
10 | | -env: |
11 | | - REGISTRY: ghcr.io |
| 9 | + # You can enable the below to build on each PR push for testing, |
| 10 | + # pull_request: |
| 11 | + # branches: |
| 12 | + # - main |
12 | 13 |
|
13 | 14 | jobs: |
14 | | - release: |
| 15 | + build_amd64: |
| 16 | + name: Build and Push AMD64 Image |
15 | 17 | runs-on: linux-8-core |
16 | 18 | permissions: |
17 | 19 | contents: read |
18 | 20 | packages: write |
| 21 | + id-token: write |
19 | 22 | steps: |
20 | | - - name: Checkout repository |
| 23 | + - name: Checkout the repo |
21 | 24 | uses: actions/checkout@v4 |
22 | 25 |
|
23 | | - - name: Set VERSION |
| 26 | + - name: Set IMAGE_TAG |
| 27 | + shell: bash |
24 | 28 | run: | |
25 | | - if [ "${{ github.ref_type }}" = "tag" ]; then |
26 | | - VERSION="${GITHUB_REF_NAME#v}" |
| 29 | + if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then |
| 30 | + TAG="${GITHUB_REF_NAME#v}" |
| 31 | + IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}" |
| 32 | + elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then |
| 33 | + IMAGE_TAG="latest" |
27 | 34 | else |
28 | | - VERSION=$(git rev-parse --short $GITHUB_SHA) |
| 35 | + IMAGE_TAG="${GITHUB_REF_NAME//\//-}" |
29 | 36 | fi |
30 | | - echo "VERSION=$VERSION" >> $GITHUB_ENV |
| 37 | + echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV |
31 | 38 |
|
32 | | - - name: Install Task |
33 | | - uses: arduino/setup-task@v2 |
34 | | - with: |
35 | | - version: 3.x |
36 | | - repo-token: ${{ secrets.GITHUB_TOKEN }} |
| 39 | + - name: Dotenv Action |
| 40 | + uses: falti/dotenv-action@v1.1.4 |
| 41 | + |
| 42 | + - name: Set up Docker Buildx |
| 43 | + uses: docker/setup-buildx-action@v3 |
37 | 44 |
|
38 | | - - name: Set up QEMU |
39 | | - uses: docker/setup-qemu-action@v3 |
| 45 | + - name: Log in to the Container registry |
| 46 | + uses: docker/login-action@v3 |
40 | 47 | with: |
41 | | - platforms: arm64 |
| 48 | + registry: ${{ env.REGISTRY }} |
| 49 | + username: ${{ github.actor }} |
| 50 | + password: ${{ secrets.GITHUB_TOKEN }} |
| 51 | + |
| 52 | + - name: Build and push AMD64 image |
| 53 | + run: > |
| 54 | + docker buildx build |
| 55 | + --platform linux/amd64 |
| 56 | + --tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-amd64 |
| 57 | + --build-arg RUST_VERSION=${{ env.RUST_VERSION }} |
| 58 | + --build-arg CARGO_COMPONENT_VERSION=${{ env.CARGO_COMPONENT_VERSION }} |
| 59 | + --build-arg WASM_TOOLS_VERSION=${{ env.WASM_TOOLS_VERSION }} |
| 60 | + --build-arg WKG_VERSION=${{ env.WKG_VERSION }} |
| 61 | + --push |
| 62 | + -f ${{ env.DOCKERFILE }} docker |
| 63 | +
|
| 64 | + build_arm64: |
| 65 | + name: Build and Push ARM64 Image |
| 66 | + runs-on: arm64-builder |
| 67 | + permissions: |
| 68 | + contents: read |
| 69 | + packages: write |
| 70 | + id-token: write |
| 71 | + steps: |
| 72 | + - name: Checkout the repo |
| 73 | + uses: actions/checkout@v4 |
| 74 | + |
| 75 | + - name: Set IMAGE_TAG |
| 76 | + shell: bash |
| 77 | + run: | |
| 78 | + if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then |
| 79 | + TAG="${GITHUB_REF_NAME#v}" |
| 80 | + IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}" |
| 81 | + elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then |
| 82 | + IMAGE_TAG="latest" |
| 83 | + else |
| 84 | + IMAGE_TAG="${GITHUB_REF_NAME//\//-}" |
| 85 | + fi |
| 86 | + echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV |
| 87 | +
|
| 88 | + - name: Dotenv Action |
| 89 | + uses: falti/dotenv-action@v1.1.4 |
42 | 90 |
|
43 | 91 | - name: Set up Docker Buildx |
44 | 92 | uses: docker/setup-buildx-action@v3 |
45 | 93 |
|
46 | | - - name: Log in to Container Registry |
| 94 | + - name: Log in to the Container registry |
47 | 95 | uses: docker/login-action@v3 |
48 | 96 | with: |
49 | 97 | registry: ${{ env.REGISTRY }} |
50 | 98 | username: ${{ github.actor }} |
51 | 99 | password: ${{ secrets.GITHUB_TOKEN }} |
52 | 100 |
|
53 | | - - name: Build and push Docker image |
| 101 | + - name: Build and push ARM64 image |
| 102 | + run: > |
| 103 | + docker buildx build |
| 104 | + --platform linux/arm64 |
| 105 | + --tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-arm64 |
| 106 | + --build-arg RUST_VERSION=${{ env.RUST_VERSION }} |
| 107 | + --build-arg CARGO_COMPONENT_VERSION=${{ env.CARGO_COMPONENT_VERSION }} |
| 108 | + --build-arg WASM_TOOLS_VERSION=${{ env.WASM_TOOLS_VERSION }} |
| 109 | + --build-arg WKG_VERSION=${{ env.WKG_VERSION }} |
| 110 | + --push |
| 111 | + -f ${{ env.DOCKERFILE }} docker |
| 112 | +
|
| 113 | + create_manifest: |
| 114 | + name: Create and Push Multi-Arch Manifest |
| 115 | + runs-on: ubuntu-latest |
| 116 | + needs: [build_amd64, build_arm64] |
| 117 | + permissions: |
| 118 | + contents: read |
| 119 | + packages: write |
| 120 | + id-token: write |
| 121 | + steps: |
| 122 | + - name: Checkout the repo |
| 123 | + uses: actions/checkout@v4 |
| 124 | + |
| 125 | + - name: Set IMAGE_TAG |
| 126 | + shell: bash |
54 | 127 | run: | |
55 | | - task build IS_LOCAL=false VERSION="$VERSION" \ |
56 | | - CACHE_FROM="type=gha,scope=wasi-builder" \ |
57 | | - CACHE_TO="type=gha,scope=wasi-builder,mode=max" |
| 128 | + if [[ "${GITHUB_REF_TYPE}" == "tag" ]]; then |
| 129 | + TAG="${GITHUB_REF_NAME#v}" |
| 130 | + IMAGE_TAG="${TAG//[^a-zA-Z0-9_.-]/-}" |
| 131 | + elif [[ "${GITHUB_REF_NAME}" == "main" ]]; then |
| 132 | + IMAGE_TAG="latest" |
| 133 | + else |
| 134 | + IMAGE_TAG="${GITHUB_REF_NAME//\//-}" |
| 135 | + fi |
| 136 | + echo "IMAGE_TAG=${IMAGE_TAG}" >> $GITHUB_ENV |
| 137 | +
|
| 138 | + - name: Set GIT_HASH |
| 139 | + run: | |
| 140 | + export GIT_HASH=$(git rev-parse --short "$GITHUB_SHA") |
| 141 | + echo "GIT_HASH=${GIT_HASH}" >> $GITHUB_ENV |
| 142 | +
|
| 143 | + - name: Dotenv Action |
| 144 | + uses: falti/dotenv-action@v1.1.4 |
| 145 | + |
| 146 | + - name: Set up Docker Buildx |
| 147 | + uses: docker/setup-buildx-action@v3 |
| 148 | + |
| 149 | + - name: Log in to the Container registry |
| 150 | + uses: docker/login-action@v3 |
| 151 | + with: |
| 152 | + registry: ${{ env.REGISTRY }} |
| 153 | + username: ${{ github.actor }} |
| 154 | + password: ${{ secrets.GITHUB_TOKEN }} |
| 155 | + |
| 156 | + - name: Create and push multi-arch manifest |
| 157 | + run: > |
| 158 | + docker buildx imagetools create |
| 159 | + --tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }} |
| 160 | + --tag ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.GIT_HASH }} |
| 161 | + ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-amd64 |
| 162 | + ${{ env.REGISTRY }}/${{ env.ORG }}/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}-arm64 |
0 commit comments