diff --git a/.github/workflows/next-build.yaml b/.github/workflows/next-build.yaml index af365cb7d..7dbe6c05c 100644 --- a/.github/workflows/next-build.yaml +++ b/.github/workflows/next-build.yaml @@ -44,21 +44,22 @@ jobs: quay.io/eclipse/che-machine-exec:next quay.io/eclipse/che-machine-exec:${{ steps.vars.outputs.sha_short }} - travis-build: - runs-on: ubuntu-latest - continue-on-error: true - steps: - - name: Trigger build on Travis CI - run: | - body="{ - \"request\":{ - \"branch\":\"main\" - }}" + # TODO: uncomment this when we're happy that travis is working for PRs + # travis-build: + # runs-on: ubuntu-latest + # continue-on-error: true + # steps: + # - name: Trigger build on Travis CI + # run: | + # body="{ + # \"request\":{ + # \"branch\":\"main\" + # }}" - curl -s -X POST \ - -H "Content-Type: application/json" \ - -H "Accept: application/json" \ - -H "Travis-API-Version: 3" \ - -H "Authorization: token ${{ secrets.TRAVIS_TOKEN }}" \ - -d "$body" \ - https://api.travis-ci.com/repo/eclipse-che%2Fche-machine-exec/requests + # curl -s -X POST \ + # -H "Content-Type: application/json" \ + # -H "Accept: application/json" \ + # -H "Travis-API-Version: 3" \ + # -H "Authorization: token ${{ secrets.TRAVIS_TOKEN }}" \ + # -d "$body" \ + # https://api.travis-ci.com/repo/eclipse-che%2Fche-machine-exec/requests diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 158add8c0..758ee9171 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -94,28 +94,29 @@ jobs: MATTERMOST_CHANNEL: eclipse-che-releases MATTERMOST_USERNAME: che-bot - travis-build: - needs: build - runs-on: ubuntu-latest - continue-on-error: true - steps: - - name: Trigger build on Travis CI - run: | - body="{ - \"request\":{ - \"config\": { - \"env\": { - \"global\": [ - \"TAG=${{ github.event.inputs.version }}\" - ] - } - } - }}" + # TODO: uncomment this when we're happy that travis is working for PRs and :next builds + # travis-build: + # needs: build + # runs-on: ubuntu-latest + # continue-on-error: true + # steps: + # - name: Trigger build on Travis CI + # run: | + # body="{ + # \"request\":{ + # \"config\": { + # \"env\": { + # \"global\": [ + # \"TAG=${{ github.event.inputs.version }}\" + # ] + # } + # } + # }}" - curl -s -X POST \ - -H "Content-Type: application/json" \ - -H "Accept: application/json" \ - -H "Travis-API-Version: 3" \ - -H "Authorization: token ${{ secrets.TRAVIS_TOKEN }}" \ - -d "$body" \ - https://api.travis-ci.com/repo/eclipse-che%2Fche-machine-exec/requests + # curl -s -X POST \ + # -H "Content-Type: application/json" \ + # -H "Accept: application/json" \ + # -H "Travis-API-Version: 3" \ + # -H "Authorization: token ${{ secrets.TRAVIS_TOKEN }}" \ + # -d "$body" \ + # https://api.travis-ci.com/repo/eclipse-che%2Fche-machine-exec/requests diff --git a/.travis.yml b/.travis.yml index fd0bf8521..4fb0d645b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,122 +1,154 @@ -language: go +# +# Copyright (c) 2021 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +language: go go: -- "1.15" - +- '1.15' os: linux dist: focal - git: depth: false -env: - global: - - TAG=next - - TRAVIS_TAG=travis - - REGISTRY=quay.io - - ORGANIZATION=eclipse - - IMAGE=che-machine-exec - - PR_NUMBER= - install: - - export SHORT_SHA=$(git rev-parse --short HEAD) - - echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin - - echo "$QUAY_PASSWORD" | docker login quay.io -u "$QUAY_USERNAME " --password-stdin + # TODO when we're confident that sha-tagged travis-built images won't collide with GHA built ones, we can remove the -travis suffix here + - export SHORT_SHA=$(git rev-parse --short HEAD)-travis + - export GITHUB_TOKEN="$CHE_BOT_GITHUB_TOKEN" + - echo "$RH_CHE_AUTOMATION_DOCKERHUB_PASSWORD" | docker login -u "$RH_CHE_AUTOMATION_DOCKERHUB_USERNAME" --password-stdin + - echo "$QUAY_ECLIPSE_CHE_PASSWORD" | docker login quay.io -u "$QUAY_ECLIPSE_CHE_USERNAME" --password-stdin + +env: + global: + - TAG=next-travis + - REGISTRY=quay.io + - ORGANIZATION=eclipse + - IMAGE=che-machine-exec + - PR_NUMBER= jobs: fast_finish: true allow_failures: - - if: env(PR_NUMBER) IS present - arch: arm64 - - if: env(PR_NUMBER) IS present - arch: ppc64le - - if: env(PR_NUMBER) IS present - arch: s390x + - if: env(PR_NUMBER) IS present + arch: arm64 + - if: env(PR_NUMBER) IS present + arch: ppc64le + - if: env(PR_NUMBER) IS present + arch: s390x include: - - &docker-build-pr - stage: PR Check - if: env(PR_NUMBER) IS present - name: Check docker build on amd64 - arch: amd64 - install: - - git fetch origin +refs/pull/${PR_NUMBER}/merge - - git checkout -qf FETCH_HEAD - script: docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:pr-check-${TRAVIS_CPU_ARCH}" . - - <<: *docker-build-pr - name: Check docker build on arm64 - arch: arm64 - - <<: *docker-build-pr - name: Check docker build on ppc64le - arch: ppc64le - - <<: *docker-build-pr - name: check docker build PR on s390x - arch: s390x - - - &unit-test - if: env(PR_NUMBER) IS present - name: Run unit tests on amd64 - arch: amd64 - install: - - git fetch origin +refs/pull/${PR_NUMBER}/merge - - git checkout -qf FETCH_HEAD - - export GO111MODULE="on" - - go get ${gobuild_args} ./... - script: - - | - CGO_ENABLED=0 GOOS=linux go build -mod=vendor -a -ldflags '-w -s' -a -installsuffix cgo -o che-machine-exec . - export CHE_WORKSPACE_ID=test_id - go test ./... -test.v - - <<: *unit-test - name: Run unit tests on arm64 - arch: arm64 - - <<: *unit-test - name: Run unit tests on ppc64le - arch: ppc64le - - <<: *unit-test - name: Run unit tests on s390x - arch: s390x - - - &next-build - stage: Build and push both short SHA tag and next tag - if: type = api AND branch = main AND env(TAG) = "next" - name: Build image on amd64 - arch: amd64 - script: - - bash .travis/build_image.sh - - <<: *next-build - name: Build image on arm64 - arch: arm64 - - <<: *next-build - name: Build image on ppc64le - arch: ppc64le - - <<: *next-build - name: Build image on s390x - arch: s390x - - - stage: Publish multiarch image with next & short_sha tag - if: type = api AND branch = main AND env(TAG) = "next" - script: bash .travis/publish_multiarch.sh - - - &release-build - stage: Release che-machine-exec - if: type = api AND env(TAG) IS present AND env(TAG) != "next" - name: Build image on amd64 - arch: amd64 - script: - - | - BRANCH=${TAG%.*}.x - git checkout "${BRANCH}" - bash .travis/build_image.sh - - <<: *release-build - name: Build image on arm64 - arch: arm64 - - <<: *release-build - name: Build image on ppc64le - arch: ppc64le - - <<: *release-build - name: Build image on s390x - arch: s390x - - - stage: Publish multiarch image with release tag - if: type = api AND env(TAG) IS present AND env(TAG) != "next" - script: bash .travis/publish_multiarch.sh + - stage: PR Check + if: env(PR_NUMBER) IS present + name: Check docker build on amd64 + arch: amd64 + install: &1 + - git fetch origin +refs/pull/${PR_NUMBER}/merge + - git checkout -qf FETCH_HEAD + script: docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:pr-check-${TRAVIS_CPU_ARCH}" + . + - stage: PR Check + if: env(PR_NUMBER) IS present + name: Check docker build on arm64 + arch: arm64 + install: *1 + script: docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:pr-check-${TRAVIS_CPU_ARCH}" + . + - stage: PR Check + if: env(PR_NUMBER) IS present + name: Check docker build on ppc64le + arch: ppc64le + install: *1 + script: docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:pr-check-${TRAVIS_CPU_ARCH}" + . + - stage: PR Check + if: env(PR_NUMBER) IS present + name: check docker build PR on s390x + arch: s390x + install: *1 + script: docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:pr-check-${TRAVIS_CPU_ARCH}" + . + - if: env(PR_NUMBER) IS present + name: Run unit tests on amd64 + arch: amd64 + install: &2 + - git fetch origin +refs/pull/${PR_NUMBER}/merge + - git checkout -qf FETCH_HEAD + - export GO111MODULE="on" + - go get ${gobuild_args} ./... + script: &3 + - | + CGO_ENABLED=0 GOOS=linux go build -mod=vendor -a -ldflags '-w -s' -a -installsuffix cgo -o che-machine-exec . + export CHE_WORKSPACE_ID=test_id + go test ./... -test.v + - if: env(PR_NUMBER) IS present + name: Run unit tests on arm64 + arch: arm64 + install: *2 + script: *3 + - if: env(PR_NUMBER) IS present + name: Run unit tests on ppc64le + arch: ppc64le + install: *2 + script: *3 + - if: env(PR_NUMBER) IS present + name: Run unit tests on s390x + arch: s390x + install: *2 + script: *3 + - stage: Build and push both short SHA tag and next-travis tag + if: type = api AND branch = main AND env(TAG) = "next-travis" AND env(PR_NUMBER) IS blank + name: Build image on amd64 + arch: amd64 + script: &4 + - .travis/build_image.sh + - stage: Build and push both short SHA tag and next-travis tag + if: type = api AND branch = main AND env(TAG) = "next-travis" AND env(PR_NUMBER) IS blank + name: Build image on arm64 + arch: arm64 + script: *4 + - stage: Build and push both short SHA tag and next-travis tag + if: type = api AND branch = main AND env(TAG) = "next-travis" AND env(PR_NUMBER) IS blank + name: Build image on ppc64le + arch: ppc64le + script: *4 + - stage: Build and push both short SHA tag and next-travis tag + if: type = api AND branch = main AND env(TAG) = "next-travis" AND env(PR_NUMBER) IS blank + name: Build image on s390x + arch: s390x + script: *4 + - stage: Publish multiarch image with next-travis & short_sha tag + if: type = api AND branch = main AND env(TAG) = "next-travis" AND env(PR_NUMBER) IS blank + script: .travis/publish_multiarch.sh + - stage: Release che-machine-exec + if: type = api AND env(TAG) IS present AND env(TAG) != "next-travis" + name: Build image on amd64 + arch: amd64 + script: &5 + - | + BRANCH=${TAG%.*}.x + git checkout "${BRANCH}" + TAG=${TAG}-travis + .travis/build_image.sh + - stage: Release che-machine-exec + if: type = api AND env(TAG) IS present AND env(TAG) != "next-travis" + name: Build image on arm64 + arch: arm64 + script: *5 + - stage: Release che-machine-exec + if: type = api AND env(TAG) IS present AND env(TAG) != "next-travis" + name: Build image on ppc64le + arch: ppc64le + script: *5 + - stage: Release che-machine-exec + if: type = api AND env(TAG) IS present AND env(TAG) != "next-travis" + name: Build image on s390x + arch: s390x + script: *5 + - stage: Publish multiarch image with release tag + if: type = api AND env(TAG) IS present AND env(TAG) != "next-travis" + script: TAG=$TAG-travis .travis/publish_multiarch.sh diff --git a/.travis/build_image.sh b/.travis/build_image.sh index bf269fbf4..575480b52 100755 --- a/.travis/build_image.sh +++ b/.travis/build_image.sh @@ -1,12 +1,27 @@ #!/bin/bash +# +# Copyright (c) 2021 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation set -e -# Build images -docker build -f build/dockerfiles/Dockerfile -t "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-${TRAVIS_CPU_ARCH}" . -docker push "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-${TRAVIS_CPU_ARCH}" +#shellcheck disable=SC1073 disable=SC2066 disable=SC2153 +for image in ${IMAGE}; do + the_image="${REGISTRY}/${ORGANIZATION}/${image}" -# Tag image with short_sha in case of next build -if [[ "$TAG" == "next" ]]; then - docker tag "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-${TRAVIS_CPU_ARCH}" "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${SHORT_SHA}-${TRAVIS_TAG}-${TRAVIS_CPU_ARCH}" - docker push "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${SHORT_SHA}-${TRAVIS_TAG}-${TRAVIS_CPU_ARCH}" -fi + # Build images + docker build -f build/dockerfiles/Dockerfile -t "${the_image}:${TAG}-${TRAVIS_CPU_ARCH}" . + docker push "${the_image}:${TAG}-${TRAVIS_CPU_ARCH}" + + # Tag image with short_sha in case of next build + if [[ "$TAG" == "next-travis" ]]; then + docker tag "${the_image}:${TAG}-${TRAVIS_CPU_ARCH}" "${the_image}:${SHORT_SHA}-${TRAVIS_CPU_ARCH}" + docker push "${the_image}:${SHORT_SHA}-${TRAVIS_CPU_ARCH}" + fi +done diff --git a/.travis/publish_multiarch.sh b/.travis/publish_multiarch.sh index 39eec45ab..28f8a932d 100755 --- a/.travis/publish_multiarch.sh +++ b/.travis/publish_multiarch.sh @@ -1,18 +1,39 @@ #!/bin/bash +# +# Copyright (c) 2021 Red Hat, Inc. +# This program and the accompanying materials are made +# available under the terms of the Eclipse Public License 2.0 +# which is available at https://www.eclipse.org/legal/epl-2.0/ +# +# SPDX-License-Identifier: EPL-2.0 +# +# Contributors: +# Red Hat, Inc. - initial API and implementation +# +# Create amend with images built on individual architectures + set -e -# Create amend with images built on individual architectures -AMEND="" -AMEND+=" --amend ${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-amd64"; -AMEND+=" --amend ${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-arm64"; -AMEND+=" --amend ${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-ppc64le"; -AMEND+=" --amend ${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}-s390x"; +PUBLISH_IMAGES_LIST=( + che-machine-exec +) +for image in "${PUBLISH_IMAGES_LIST[@]}"; do + the_image="${REGISTRY}/${ORGANIZATION}/${image}" + AMEND="" + AMEND+=" --amend ${the_image}:${TAG}-amd64"; + AMEND+=" --amend ${the_image}:${TAG}-arm64"; + AMEND+=" --amend ${the_image}:${TAG}-ppc64le"; + AMEND+=" --amend ${the_image}:${TAG}-s390x"; -# Create manifest and push multiarch image -docker manifest create "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}" $AMEND -docker manifest push "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${TAG}-${TRAVIS_TAG}" + # Create manifest and push multiarch image + eval docker manifest create "${the_image}:${TAG}" "$AMEND" + docker manifest push "${the_image}:${TAG}" -if [[ "$TAG" == "next" ]]; then - docker manifest create "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${SHORT_SHA}-${TRAVIS_TAG}" $AMEND - docker manifest push "${REGISTRY}/${ORGANIZATION}/${IMAGE}:${SHORT_SHA}-${TRAVIS_TAG}" -fi + if [[ "${TAG}" == "next-travis" ]]; then + eval docker manifest create "${the_image}:${SHORT_SHA}" "$AMEND" + docker manifest push "${the_image}:${SHORT_SHA}" + else + eval docker manifest create "${the_image}:latest-travis" "$AMEND" + docker manifest push "${the_image}:latest-travis" + fi +done