diff --git a/.github/workflows/build-dev-image.yml b/.github/workflows/build-dev-image.yml deleted file mode 100644 index 1476e333a..000000000 --- a/.github/workflows/build-dev-image.yml +++ /dev/null @@ -1,123 +0,0 @@ -name: Build dev image on push to main automatically - -on: - push: - branches: - - main - -jobs: - build-dev-image: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - name: Set up JDK 21 - uses: actions/setup-java@v4 - with: - distribution: 'temurin' - java-version: '21' - - uses: actions/cache@v3 - with: - path: ~/.m2/repository - key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} - restore-keys: | - ${{ runner.os }}-maven- - - name: Build - run: | - ./mvnw clean install -B -DskipTests -P exec-jar - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/canner/wren-engine - tags: | - type=sha - type=raw,value=nightly - - name: Login to ghcr - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Prepare - id: prepare - run: | - WREN_VERSION=$(./mvnw --quiet help:evaluate -Dexpression=project.version -DforceStdout) - cp ./wren-server/target/wren-server-${WREN_VERSION}-executable.jar ./docker - echo "WREN_VERSION=$WREN_VERSION" >> "$GITHUB_OUTPUT" - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: ./docker - platforms: linux/amd64,linux/arm64 - tags: ${{ steps.meta.outputs.tags }} - build-args: | - WREN_VERSION=${{ steps.prepare.outputs.WREN_VERSION }} - push: true - build-ibis-amd64-image: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/canner/wren-engine-ibis - tags: | - type=sha - type=raw,value=nightly - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: ./ibis-server - build-contexts: | - wren-core-py=./wren-core-py - wren-core=./wren-core - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - build-ibis-arm64-image: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 - with: - images: ghcr.io/canner/wren-engine-ibis - tags: | - type=sha - type=raw,value=nightly - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: ./ibis-server - build-contexts: | - wren-core-py=./wren-core-py - wren-core=./wren-core - platforms: linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/build-image.yml b/.github/workflows/build-image.yml index cd197bb37..e241d780c 100644 --- a/.github/workflows/build-image.yml +++ b/.github/workflows/build-image.yml @@ -1,12 +1,19 @@ -name: Build image manually +name: Build image on: + push: + branches: + - main workflow_dispatch: inputs: docker_image_tag_name: type: string description: Docker image tag name (Optional) +env: + ENGINE_IMAGE: ghcr.io/canner/wren-engine + IBIS_IMAGE: ghcr.io/canner/wren-engine-ibis + jobs: prepare-tag: runs-on: ubuntu-latest @@ -15,14 +22,21 @@ jobs: - name: Prepare tag name id: prepare_tag run: | - if [ -n "${{ github.event.inputs.docker_image_tag_name }}" ]; then - tag_name=${{ github.event.inputs.docker_image_tag_name }} - else - tag_name=$(echo ${{ github.ref_name }} | sed 's/[^a-zA-Z0-9]/-/g')-$(git log -1 --pretty=%h) + if [ "${{ github.event_name }}" = "push" ]; then + echo "type=sha" > tags.txt + echo "type=raw,value=nightly" > tags.txt + fi + if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then + if [ -n "${{ github.event.inputs.docker_image_tag_name }}" ]; then + tag_name=${{ github.event.inputs.docker_image_tag_name }} + else + tag_name=$(echo ${{ github.ref_name }} | sed 's/[^a-zA-Z0-9]/-/g')-$(git log -1 --pretty=%h) + fi + echo "type=raw,value=$tag_name" > tags.txt fi - echo "tag_name=$tag_name" >> "$GITHUB_OUTPUT" + echo "tags=$(cat tags.txt)" >> $GITHUB_OUTPUT outputs: - tag_name: ${{ steps.prepare_tag.outputs.tag_name }} + tags: ${{ steps.prepare_tag.outputs.tags }} build-image: needs: prepare-tag runs-on: ubuntu-latest @@ -41,9 +55,8 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine - tags: | - type=raw,value=${{ needs.prepare-tag.outputs.tag_name }} + images: ${{ env.ENGINE_IMAGE }} + tags: ${{ needs.prepare-tag.outputs.tags }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: @@ -69,67 +82,89 @@ jobs: build-args: | WREN_VERSION=${{ steps.prepare.outputs.WREN_VERSION }} push: true - build-ibis-amd64-image: + build-ibis-image: needs: prepare-tag - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: + - runner: ubuntu-latest + platform: linux/amd64 + - runner: linux_arm64_runner + platform: linux/arm64 + runs-on: ${{ matrix.arch.runner }} steps: + - name: Prepare platform + run: | + platform=${{ matrix.arch.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - uses: actions/checkout@v4 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine-ibis - tags: | - type=raw,value=${{ needs.prepare-tag.outputs.tag_name }} + images: ${{ env.IBIS_IMAGE }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 with: + platforms: ${{ matrix.arch.platform }} + labels: ${{ steps.meta.outputs.labels }} context: ./ibis-server build-contexts: | wren-core-py=./wren-core-py wren-core=./wren-core - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - build-ibis-arm64-image: - needs: prepare-tag + outputs: type=image,name=${{ env.IBIS_IMAGE }},push-by-digest=true,name-canonical=true,push=true + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + merge: runs-on: ubuntu-latest + needs: [ prepare-tag, build-ibis-image ] steps: - - uses: actions/checkout@v4 + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine-ibis - tags: | - type=raw,value=${{ needs.prepare-tag.outputs.tag_name }} + images: ${{ env.IBIS_IMAGE }} + tags: ${{ needs.prepare-tag.outputs.tags }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: ./ibis-server - build-contexts: | - wren-core-py=./wren-core-py - wren-core=./wren-core - platforms: linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.IBIS_IMAGE }}@sha256:%s ' *) \ + --tag ${{ steps.meta.outputs.tags }} + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/stable-release.yml b/.github/workflows/stable-release.yml index d7615c3db..98b136df0 100644 --- a/.github/workflows/stable-release.yml +++ b/.github/workflows/stable-release.yml @@ -7,6 +7,10 @@ on: type: string description: Specific version number (Optional). Default will be the current version plus 0.0.1. +env: + ENGINE_IMAGE: ghcr.io/canner/wren-engine + IBIS_IMAGE: ghcr.io/canner/wren-engine-ibis + jobs: prepare-version: runs-on: ubuntu-latest @@ -84,7 +88,7 @@ jobs: id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine + images: ${{ env.ENGINE_IMAGE }} tags: | type=raw,value=${{ needs.prepare-version.outputs.maven_version }} type=raw,value=latest @@ -113,51 +117,78 @@ jobs: build-args: | WREN_VERSION=${{ steps.prepare.outputs.WREN_VERSION }} push: true - stable-release-ibis-amd64: + stable-release-ibis: needs: prepare-version - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + arch: + - runner: ubuntu-latest + platform: linux/amd64 + - runner: linux_arm64_runner + platform: linux/arm64 + runs-on: ${{ matrix.arch.runner }} steps: + - name: Prepare platform + run: | + platform=${{ matrix.arch.platform }} + echo "PLATFORM_PAIR=${platform//\//-}" >> $GITHUB_ENV - uses: actions/checkout@v4 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine-ibis - tags: | - type=raw,value=${{ needs.prepare-version.outputs.next_version }} - type=raw,value=latest + images: ${{ env.IBIS_IMAGE }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 + - name: Build and push by digest + id: build + uses: docker/build-push-action@v6 with: + platforms: ${{ matrix.arch.platform }} + labels: ${{ steps.meta.outputs.labels }} context: ./ibis-server build-args: | RUST_PROFILE=--release build-contexts: | wren-core-py=./wren-core-py wren-core=./wren-core - platforms: linux/amd64 - push: true - tags: ${{ steps.meta.outputs.tags }} - stable-release-ibis-arm64: - needs: prepare-version + outputs: type=image,name=${{ env.IBIS_IMAGE }},push-by-digest=true,name-canonical=true,push=true + - name: Export digest + run: | + mkdir -p /tmp/digests + digest="${{ steps.build.outputs.digest }}" + touch "/tmp/digests/${digest#sha256:}" + - name: Upload digest + uses: actions/upload-artifact@v4 + with: + name: digests-${{ env.PLATFORM_PAIR }} + path: /tmp/digests/* + if-no-files-found: error + retention-days: 1 + merge: runs-on: ubuntu-latest + needs: [ prepare-version, stable-release-ibis ] steps: - - uses: actions/checkout@v4 + - name: Download digests + uses: actions/download-artifact@v4 + with: + path: /tmp/digests + pattern: digests-* + merge-multiple: true + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3 - name: Docker meta id: meta uses: docker/metadata-action@v5 with: - images: ghcr.io/canner/wren-engine-ibis + images: ${{ env.IBIS_IMAGE }} tags: | type=raw,value=${{ needs.prepare-version.outputs.next_version }} type=raw,value=latest @@ -167,19 +198,12 @@ jobs: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Build and push - uses: docker/build-push-action@v5 - with: - context: ./ibis-server - build-args: | - RUST_PROFILE=--release - build-contexts: | - wren-core-py=./wren-core-py - wren-core=./wren-core - platforms: linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} + - name: Create manifest list and push + working-directory: /tmp/digests + run: | + docker buildx imagetools create $(jq -cr '.tags | map("-t " + .) | join(" ")' <<< "$DOCKER_METADATA_OUTPUT_JSON") \ + $(printf '${{ env.IBIS_IMAGE }}@sha256:%s ' *) \ + --tag ${{ steps.meta.outputs.tags }} + - name: Inspect image + run: | + docker buildx imagetools inspect ${{ steps.meta.outputs.tags }}