diff --git a/.github/workflows/build-package.yml b/.github/workflows/build-package.yml new file mode 100644 index 000000000..81794f91d --- /dev/null +++ b/.github/workflows/build-package.yml @@ -0,0 +1,119 @@ +name: "Build Package Workflow" +env: + DOCKER_COMPOSE_VERSION: 1.23.0 + +on: + push: + branches: + - master + - release-* + tags: + - v* +jobs: + BUILD_PACKAGE: + env: + BUILD_PACKAGE: true + runs-on: + #- self-hosted + - ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: GoogleCloudPlatform/github-actions/setup-gcloud@master + with: + version: '285.0.0' + project_id: ${{ secrets.GCP_PROJECT_ID }} + service_account_email: ${{ secrets.GCP_SA_EMAIL }} + service_account_key: ${{ secrets.GCP_SA_KEY }} + export_default_credentials: true + - run: gcloud info + - name: Set up Go 1.14 + uses: actions/setup-go@v1 + with: + go-version: 1.15.6 + id: go + - name: setup Docker + uses: docker-practice/actions-setup-docker@0.0.1 + with: + docker_version: 18.09 + docker_channel: stable + - uses: actions/checkout@v2.1.0 + - uses: jitterbit/get-changed-files@v1 + id: changed-files + with: + format: space-delimited + token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v2 + with: + path: src/github.com/goharbor/harbor + - name: Build Base Image + if: contains(steps.changed-files.outputs.modified, 'Dockerfile.base') || contains(steps.changed-files.outputs.modified, 'VERSION') + run: | + set -x + base_image_tag=$(cat ./VERSION) + cd src/github.com/goharbor/harbor + sudo make build_base_docker -e BASEIMAGETAG=$base_image_tag -e REGISTRYUSER="${{ secrets.DOCKER_HUB_USERNAME }}" -e REGISTRYPASSWORD="${{ secrets.DOCKER_HUB_PASSWORD }}" -e PUSHBASEIMAGE=yes + - name: Build Package + run: | + set -x + env + df -h + harbor_target_bucket="" + target_branch="$(echo ${GITHUB_REF#refs/heads/})" + harbor_offline_build_bundle="" + harbor_online_build_bundle="" + harbor_logs_bucket="harbor-ci-logs" + harbor_builds_bucket="harbor-builds" + harbor_releases_bucket="harbor-releases" + harbor_ci_pipeline_store_bucket="harbor-ci-pipeline-store/latest" + # the target release version is the version of next release(RC or GA). It needs to be updated on creating new release branch. + target_release_version=$(cat ./VERSION) + Harbor_Package_Version=$target_release_version-'build.'$GITHUB_RUN_NUMBER + + if [[ $target_branch == "master" ]]; then + Harbor_Assets_Version=$Harbor_Package_Version + harbor_target_bucket=$harbor_builds_bucket + else + Harbor_Assets_Version=$target_release_version + harbor_target_bucket=$harbor_releases_bucket/$target_branch + fi + + if [[ $target_branch == "release-"* ]]; then + Harbor_Build_Base_Tag=$target_release_version + else + Harbor_Build_Base_Tag=dev + fi + + cd src/github.com/goharbor/harbor + sudo make package_offline GOBUILDTAGS="include_oss include_gcs" BASEIMAGETAG=${Harbor_Build_Base_Tag} VERSIONTAG=${Harbor_Assets_Version} PKGVERSIONTAG=${Harbor_Package_Version} NOTARYFLAG=true CLAIRFLAG=true MIGRATORFLAG=true CHARTFLAG=true HTTPPROXY= + sudo make package_online GOBUILDTAGS="include_oss include_gcs" VERSIONTAG=${Harbor_Assets_Version} PKGVERSIONTAG=${Harbor_Package_Version} NOTARYFLAG=true CLAIRFLAG=true MIGRATORFLAG=false CHARTFLAG=true HTTPPROXY= + harbor_offline_build_bundle=$(basename harbor-offline-installer-*.tgz) + harbor_online_build_bundle=$(basename harbor-online-installer-*.tgz) + echo "Package name is: $harbor_offline_build_bundle" + echo "Package name is: $harbor_online_build_bundle" + + echo -en "${{ secrets.HARBOR_SIGN_KEY }}" | gpg --import + gpg -v -ab -u ${{ secrets.HARBOR_SIGN_KEY_ID }} $harbor_offline_build_bundle + gpg -v -ab -u ${{ secrets.HARBOR_SIGN_KEY_ID }} $harbor_online_build_bundle + + source tests/ci/build_util.sh + cp ${harbor_offline_build_bundle} harbor-offline-installer-latest.tgz + cp ${harbor_offline_build_bundle}.asc harbor-offline-installer-latest.tgz.asc + uploader ${harbor_offline_build_bundle} $harbor_target_bucket + uploader ${harbor_offline_build_bundle}.asc $harbor_target_bucket + uploader ${harbor_online_build_bundle} $harbor_target_bucket + uploader ${harbor_online_build_bundle}.asc $harbor_target_bucket + uploader harbor-offline-installer-latest.tgz $harbor_target_bucket + uploader harbor-offline-installer-latest.tgz.asc $harbor_target_bucket + echo "BUILD_BUNDLE=$harbor_offline_build_bundle" >> $GITHUB_ENV + + publishImage $target_branch $Harbor_Assets_Version "${{ secrets.DOCKER_HUB_USERNAME }}" "${{ secrets.DOCKER_HUB_PASSWORD }}" + + - name: Slack Notification + uses: sonots/slack-notice-action@v3 + with: + status: ${{ job.status }} + title: Build Package - ${{ env.BUILD_BUNDLE }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }} + if: always() diff --git a/tests/ci/build_util.sh b/tests/ci/build_util.sh new file mode 100644 index 000000000..bec07d990 --- /dev/null +++ b/tests/ci/build_util.sh @@ -0,0 +1,28 @@ +#!/bin/bash +set -x + +set -e + +function uploader { + gsutil cp $1 gs://$2/$1 + gsutil -D setacl public-read gs://$2/$1 &> /dev/null +} + +function publishImage { + echo "Publishing images to Docker Hub..." + echo "The images on the host:" + # for master, will use 'dev' as the tag name + # for release-*, will use 'release-*-dev' as the tag name, like release-v1.8.0-dev + if [[ $1 == "master" ]]; then + image_tag=dev + fi + if [[ $1 == "release-"* ]]; then + image_tag=$2-dev + fi + # rename the images with tag "dev" and push to Docker Hub + docker images + docker login -u $3 -p $4 + docker images | grep goharbor | grep -v "\-base" | sed -n "s|\(goharbor/[-._a-z0-9]*\)\s*\(.*$2\).*|docker tag \1:\2 \1:$image_tag;docker push \1:$image_tag|p" | bash + echo "Images are published successfully" + docker images +} \ No newline at end of file