From a93344386c8af6466449b6ad5596c3016391b135 Mon Sep 17 00:00:00 2001 From: Steven Kang Date: Mon, 5 Feb 2024 18:24:16 +1300 Subject: [PATCH] Pre-release as part of the CI (#11066) * feat: add pre-release * feat: add extension * feat: fix typo --- .github/workflows/ci.yaml | 94 +++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index fa9a93d21..b8167a61d 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -20,8 +20,8 @@ on: - ready_for_review env: - DOCKER_HUB_REPO: portainerci/portainer - NODE_ENV: testing + DOCKER_HUB_REPO: portainerci/portainer-ce + EXTENSION_HUB_REPO: portainerci/portainer-docker-extension GO_VERSION: 1.21.6 NODE_VERSION: 18.x @@ -30,19 +30,22 @@ jobs: strategy: matrix: config: - - { platform: linux, arch: amd64 } - - { platform: linux, arch: arm64 } + - { platform: linux, arch: amd64, version: "" } + - { platform: linux, arch: arm64, version: "" } + - { platform: linux, arch: arm, version: "" } + - { platform: linux, arch: ppc64le, version: "" } + - { platform: linux, arch: s390x, version: "" } - { platform: windows, arch: amd64, version: 1809 } - { platform: windows, arch: amd64, version: ltsc2022 } runs-on: arc-runner-set if: github.event.pull_request.draft == false steps: - name: '[preparation] checkout the current branch' - uses: actions/checkout@v3.5.3 + uses: actions/checkout@v4.1.1 with: ref: ${{ github.event.inputs.branch }} - name: '[preparation] set up golang' - uses: actions/setup-go@v4.0.1 + uses: actions/setup-go@v5.0.0 with: go-version: ${{ env.GO_VERSION }} cache: false @@ -53,7 +56,7 @@ jobs: echo "go-build-dir=$(go env GOCACHE)" >> "$GITHUB_OUTPUT" echo "go-mod-dir=$(go env GOMODCACHE)" >> "$GITHUB_OUTPUT" - name: '[preparation] cache go' - uses: actions/cache@v3 + uses: actions/cache@v4.0.0 with: path: | ${{ steps.cache-dir-path.outputs.go-build-dir }} @@ -63,12 +66,12 @@ jobs: ${{ matrix.config.platform }}-${{ matrix.config.arch }}-go- enableCrossOsArchive: true - name: '[preparation] set up node.js' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4.0.1 with: node-version: ${{ env.NODE_VERSION }} cache: '' - name: '[preparation] cache yarn' - uses: actions/cache@v3 + uses: actions/cache@v4.0.0 with: path: | **/node_modules @@ -78,33 +81,35 @@ jobs: ${{ matrix.config.platform }}-${{ matrix.config.arch }}-yarn- enableCrossOsArchive: true - name: '[preparation] set up qemu' - uses: docker/setup-qemu-action@v2 + uses: docker/setup-qemu-action@v3.0.0 - name: '[preparation] set up docker context for buildx' run: docker context create builders - name: '[preparation] set up docker buildx' - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3.0.0 with: endpoint: builders - name: '[preparation] docker login' - uses: docker/login-action@v2.2.0 + uses: docker/login-action@v3.0.0 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: '[preparation] set the container image tag' run: | - if [ "${GITHUB_EVENT_NAME}" == "pull_request" ]; then + if [[ "${GITHUB_BASE_REF}" =~ ^release/.*$ ]]; then + # use the release branch name as the tag for release branches + # for instance, release/2.19 becomes 2.19 + CONTAINER_IMAGE_TAG=$(echo $GITHUB_BASE_REF | cut -d "/" -f 2) + elif [ "${GITHUB_EVENT_NAME}" == "pull_request" ]; then + # use pr${{ github.event.number }} as the tag for pull requests + # for instance, pr123 CONTAINER_IMAGE_TAG="pr${{ github.event.number }}" else + # replace / with - in the branch name + # for instance, feature/1.0.0 -> feature-1.0.0 CONTAINER_IMAGE_TAG=$(echo $GITHUB_REF_NAME | sed 's/\//-/g') fi - - if [ "${{ matrix.config.platform }}" == "windows" ]; then - CONTAINER_IMAGE_TAG="${CONTAINER_IMAGE_TAG}-${{ matrix.config.platform }}${{ matrix.config.version }}-${{ matrix.config.arch }}" - else - CONTAINER_IMAGE_TAG="${CONTAINER_IMAGE_TAG}-${{ matrix.config.platform }}-${{ matrix.config.arch }}" - fi - - echo "CONTAINER_IMAGE_TAG=${CONTAINER_IMAGE_TAG}" >> $GITHUB_ENV + + echo "CONTAINER_IMAGE_TAG=${CONTAINER_IMAGE_TAG}-${{ matrix.config.platform }}${{ matrix.config.version }}-${{ matrix.config.arch }}" >> $GITHUB_ENV - name: '[execution] build linux & windows portainer binaries' run: | export YARN_VERSION=$(yarn --version) @@ -112,6 +117,12 @@ jobs: export BUILDNUMBER=${GITHUB_RUN_NUMBER} GIT_COMMIT_HASH_LONG=${{ github.sha }} export GIT_COMMIT_HASH_SHORT={GIT_COMMIT_HASH_LONG:0:7} + + NODE_ENV="testing" + if [[ "${GITHUB_BASE_REF}" =~ ^release/.*$ ]]; then + NODE_ENV="production" + fi + make build-all PLATFORM=${{ matrix.config.platform }} ARCH=${{ matrix.config.arch }} ENV=${NODE_ENV} env: CONTAINER_IMAGE_TAG: ${{ env.CONTAINER_IMAGE_TAG }} @@ -123,6 +134,11 @@ jobs: else docker buildx build --output=type=registry --platform ${{ matrix.config.platform }}/${{ matrix.config.arch }} -t "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}" -f build/${{ matrix.config.platform }}/Dockerfile . docker buildx build --output=type=registry --platform ${{ matrix.config.platform }}/${{ matrix.config.arch }} -t "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-alpine" -f build/${{ matrix.config.platform }}/alpine.Dockerfile . + + if [[ "${GITHUB_BASE_REF}" =~ ^release/.*$ ]]; then + docker buildx build --output=type=registry --platform ${{ matrix.config.platform }}/${{ matrix.config.arch }} -t "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}" -f build/${{ matrix.config.platform }}/Dockerfile . + docker buildx build --output=type=registry --platform ${{ matrix.config.platform }}/${{ matrix.config.arch }} -t "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-alpine" -f build/${{ matrix.config.platform }}/alpine.Dockerfile . + fi fi env: CONTAINER_IMAGE_TAG: ${{ env.CONTAINER_IMAGE_TAG }} @@ -132,26 +148,56 @@ jobs: needs: [build_images] steps: - name: '[preparation] docker login' - uses: docker/login-action@v2.2.0 + uses: docker/login-action@v3.0.0 with: username: ${{ secrets.DOCKER_HUB_USERNAME }} password: ${{ secrets.DOCKER_HUB_PASSWORD }} - name: '[preparation] set up docker context for buildx' run: docker version && docker context create builders - name: '[preparation] set up docker buildx' - uses: docker/setup-buildx-action@v2 + uses: docker/setup-buildx-action@v3.0.0 with: endpoint: builders - name: '[execution] build and push manifests' run: | - if [ "${GITHUB_EVENT_NAME}" == "pull_request" ]; then + if [[ "${GITHUB_BASE_REF}" =~ ^release/.*$ ]]; then + # use the release branch name as the tag for release branches + # for instance, release/2.19 becomes 2.19 + CONTAINER_IMAGE_TAG=$(echo $GITHUB_BASE_REF | cut -d "/" -f 2) + elif [ "${GITHUB_EVENT_NAME}" == "pull_request" ]; then + # use pr${{ github.event.number }} as the tag for pull requests + # for instance, pr123 CONTAINER_IMAGE_TAG="pr${{ github.event.number }}" else + # replace / with - in the branch name + # for instance, feature/1.0.0 -> feature-1.0.0 CONTAINER_IMAGE_TAG=$(echo $GITHUB_REF_NAME | sed 's/\//-/g') fi docker buildx imagetools create -t "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}" \ "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-amd64" \ "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm64" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-ppc64le" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-s390x" \ "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-windows1809-amd64" \ "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-windowsltsc2022-amd64" + + docker buildx imagetools create -t "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-alpine" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-amd64-alpine" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm64-alpine" \ + "${DOCKER_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm-alpine" + + if [[ "${GITHUB_BASE_REF}" =~ ^release/.*$ ]]; then + docker buildx imagetools create -t "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-amd64" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm64" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-ppc64le" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-s390x" + + docker buildx imagetools create -t "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-alpine" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-amd64-alpine" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm64-alpine" \ + "${EXTENSION_HUB_REPO}:${CONTAINER_IMAGE_TAG}-linux-arm-alpine" + fi