-
Notifications
You must be signed in to change notification settings - Fork 906
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
chore(ci): GHA - container image and apt package build & push (#9823)
* chore(ci): Merge GHA steps to single step Before adding container build (and push) steps on master/release-*/PR/tag simplify jobs down and confirm there is no unreasonable increase in CI job duration. * chore(ci): Update mergify job match and make consistent - `Deck CI` was renamed to `build` as per the other services. - It was difficult to diff compare this file to the other services so some keys were slightly rearranged to minimise the diff. No functional impact. * chore(ci): GHA - container image and apt package build & push to Google Artifact Registry see: spinnaker/rosco#841 and follow up PR's all bundled here. * chore(ci): GHA - gradle build different to java service - there is no `installDist` target. `build` target generates files we can copy into container in `Dockerfile`. - switch bintray plugin for (Google) artifact publish plugin - call artifact publish plugin directly rather than via a "publish" task (cherry picked from commit f5fe6c2) # Conflicts: # .github/workflows/ci.yml # .mergify.yml
- Loading branch information
1 parent
df21ef6
commit f2eb4a2
Showing
7 changed files
with
359 additions
and
6 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
name: Branch Build | ||
|
||
on: | ||
push: | ||
branches: | ||
- master | ||
- release-* | ||
|
||
env: | ||
GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g | ||
CONTAINER_REGISTRY: us-docker.pkg.dev/spinnaker-community/docker | ||
NODE_VERSION: 12.16.0 | ||
|
||
jobs: | ||
branch-build: | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- uses: actions/setup-node@v1 | ||
with: | ||
node-version: ${{ env.NODE_VERSION }} | ||
- name: Get yarn cache | ||
id: yarn-cache | ||
run: echo "::set-output name=dir::$(yarn cache dir)" | ||
- uses: actions/cache@v1 | ||
with: | ||
path: ${{ steps.yarn-cache.outputs.dir }} | ||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-yarn- | ||
- name: Install Dependencies | ||
run: yarn --frozen-lockfile | ||
- name: Eslint Plugin Build | ||
run: | | ||
cd packages/eslint-plugin | ||
yarn tsc | ||
yarn test | ||
- name: Assert - no lint violations | ||
run: yarn lint | ||
- name: Assert - code is formatted | ||
run: yarn prettier:check | ||
- name: Build Modules | ||
run: yarn modules | ||
- name: Unit Tests | ||
run: yarn test --single-run | ||
- name: Functional Tests | ||
run: yarn functional | ||
- name: Yarn Build | ||
run: yarn build | ||
|
||
- uses: actions/setup-java@v2 | ||
with: | ||
java-version: 11 | ||
distribution: 'zulu' | ||
cache: 'gradle' | ||
- name: Prepare build variables | ||
id: build_variables | ||
run: | | ||
echo ::set-output name=REPO::${GITHUB_REPOSITORY##*/} | ||
echo ::set-output name=VERSION::"$(git describe --tags --abbrev=0 --match="v[0-9]*" | cut -c2-)-dev-${GITHUB_REF_NAME}-$(git rev-parse --short HEAD)-$(date --utc +'%Y%m%d%H%M')" | ||
- name: Build | ||
env: | ||
ORG_GRADLE_PROJECT_version: ${{ steps.build_variables.outputs.VERSION }} | ||
run: ./gradlew build --stacktrace | ||
- name: Login to GAR | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/login-action@v1 | ||
# use service account flow defined at: https://github.com/docker/login-action#service-account-based-authentication-1 | ||
with: | ||
registry: us-docker.pkg.dev | ||
username: _json_key | ||
password: ${{ secrets.GAR_JSON_KEY }} | ||
- name: Build and publish slim container image | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.slim | ||
push: true | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ github.ref_name }}-latest-unvalidated" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-unvalidated" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ github.ref_name }}-latest-unvalidated-slim" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-unvalidated-slim" | ||
- name: Build and publish ubuntu container image | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.ubuntu | ||
push: true | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ github.ref_name }}-latest-unvalidated-ubuntu" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-unvalidated-ubuntu" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
name: PR Build | ||
|
||
on: [ pull_request ] | ||
|
||
env: | ||
GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g | ||
CONTAINER_REGISTRY: us-docker.pkg.dev/spinnaker-community/docker | ||
|
||
jobs: | ||
build: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
|
||
- uses: actions/setup-node@v1 | ||
with: | ||
node-version: ${{ env.NODE_VERSION }} | ||
- name: Get yarn cache | ||
id: yarn-cache | ||
run: echo "::set-output name=dir::$(yarn cache dir)" | ||
- uses: actions/cache@v1 | ||
with: | ||
path: ${{ steps.yarn-cache.outputs.dir }} | ||
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} | ||
restore-keys: | | ||
${{ runner.os }}-yarn- | ||
- name: Install Dependencies | ||
run: yarn --frozen-lockfile | ||
- name: Eslint Plugin Build | ||
run: | | ||
cd packages/eslint-plugin | ||
yarn tsc | ||
yarn test | ||
- name: Assert - no lint violations | ||
run: yarn lint | ||
- name: Assert - code is formatted | ||
run: yarn prettier:check | ||
- name: Build Modules | ||
run: yarn modules | ||
- name: Unit Tests | ||
run: yarn test --single-run | ||
- name: Functional Tests | ||
run: yarn functional | ||
- name: Yarn Build | ||
run: yarn build | ||
|
||
- uses: actions/setup-java@v2 | ||
with: | ||
java-version: 11 | ||
distribution: 'zulu' | ||
cache: 'gradle' | ||
- name: Prepare build variables | ||
id: build_variables | ||
run: | | ||
echo ::set-output name=REPO::${GITHUB_REPOSITORY##*/} | ||
echo ::set-output name=VERSION::"$(git describe --tags --abbrev=0 --match="v[0-9]*" | cut -c2-)-dev-pr-$(git rev-parse --short HEAD)-$(date --utc +'%Y%m%d%H%M')" | ||
- name: Build | ||
env: | ||
ORG_GRADLE_PROJECT_version: ${{ steps.build_variables.outputs.VERSION }} | ||
run: ./gradlew build | ||
- name: Build slim container image | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.slim | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:latest" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:latest-slim" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-slim" | ||
- name: Build ubuntu container image | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.ubuntu | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:latest-ubuntu" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.build_variables.outputs.VERSION }}-ubuntu" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,100 @@ | ||
name: Release | ||
|
||
on: | ||
push: | ||
tags: | ||
- "v[0-9]+.[0-9]+.[0-9]+" | ||
- "v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+" | ||
|
||
env: | ||
GRADLE_OPTS: -Dorg.gradle.daemon=false -Xmx2g -Xms2g | ||
CONTAINER_REGISTRY: us-docker.pkg.dev/spinnaker-community/docker | ||
|
||
jobs: | ||
release: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
with: | ||
fetch-depth: 0 | ||
- uses: actions/setup-java@v2 | ||
with: | ||
java-version: 11 | ||
distribution: 'zulu' | ||
cache: 'gradle' | ||
- name: Assemble release info | ||
id: release_info | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
. .github/workflows/release_info.sh ${{ github.event.repository.full_name }} | ||
echo ::set-output name=CHANGELOG::$(echo -e "${CHANGELOG}") | ||
echo ::set-output name=SKIP_RELEASE::${SKIP_RELEASE} | ||
echo ::set-output name=IS_CANDIDATE::${IS_CANDIDATE} | ||
echo ::set-output name=RELEASE_VERSION::${RELEASE_VERSION} | ||
- name: Prepare build variables | ||
id: build_variables | ||
run: | | ||
echo ::set-output name=REPO::${GITHUB_REPOSITORY##*/} | ||
echo ::set-output name=VERSION::"$(git rev-parse --short HEAD)-$(date --utc +'%Y%m%d%H%M')" | ||
- name: Release build | ||
env: | ||
ORG_GRADLE_PROJECT_version: ${{ steps.release_info.outputs.RELEASE_VERSION }} | ||
ORG_GRADLE_PROJECT_nexusPublishEnabled: true | ||
ORG_GRADLE_PROJECT_nexusUsername: ${{ secrets.NEXUS_USERNAME }} | ||
ORG_GRADLE_PROJECT_nexusPassword: ${{ secrets.NEXUS_PASSWORD }} | ||
ORG_GRADLE_PROJECT_nexusPgpSigningKey: ${{ secrets.NEXUS_PGP_SIGNING_KEY }} | ||
ORG_GRADLE_PROJECT_nexusPgpSigningPassword: ${{ secrets.NEXUS_PGP_SIGNING_PASSWORD }} | ||
run: | | ||
./gradlew --info build | ||
- name: Publish apt packages to Google Artifact Registry | ||
env: | ||
ORG_GRADLE_PROJECT_version: ${{ steps.release_info.outputs.RELEASE_VERSION }} | ||
ORG_GRADLE_PROJECT_artifactRegistryPublishEnabled: true | ||
GAR_JSON_KEY: ${{ secrets.GAR_JSON_KEY }} | ||
run: | | ||
./gradlew --info publishDebToArtifactRegistry | ||
- name: Login to GAR | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/login-action@v1 | ||
# use service account flow defined at: https://github.com/docker/login-action#service-account-based-authentication-1 | ||
with: | ||
registry: us-docker.pkg.dev | ||
username: _json_key | ||
password: ${{ secrets.GAR_JSON_KEY }} | ||
- name: Build and publish slim container image | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.slim | ||
push: true | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.release_info.outputs.RELEASE_VERSION }}-unvalidated" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.release_info.outputs.RELEASE_VERSION }}-unvalidated-slim" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.release_info.outputs.RELEASE_VERSION }}-${{ steps.build_variables.outputs.VERSION }}-unvalidated-slim" | ||
- name: Build and publish ubuntu container image | ||
# Only run this on repositories in the 'spinnaker' org, not on forks. | ||
if: startsWith(github.repository, 'spinnaker/') | ||
uses: docker/build-push-action@v2 | ||
with: | ||
context: . | ||
file: Dockerfile.ubuntu | ||
push: true | ||
tags: | | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.release_info.outputs.RELEASE_VERSION }}-unvalidated-ubuntu" | ||
"${{ env.CONTAINER_REGISTRY }}/${{ steps.build_variables.outputs.REPO }}:${{ steps.release_info.outputs.RELEASE_VERSION }}-${{ steps.build_variables.outputs.VERSION }}-unvalidated-ubuntu" | ||
- name: Create release | ||
if: steps.release_info.outputs.SKIP_RELEASE == 'false' | ||
uses: actions/create-release@v1 | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
with: | ||
tag_name: ${{ github.ref }} | ||
release_name: ${{ github.event.repository.name }} ${{ github.ref }} | ||
body: | | ||
${{ steps.release_info.outputs.CHANGELOG }} | ||
draft: false | ||
prerelease: ${{ steps.release_info.outputs.IS_CANDIDATE }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
#!/bin/bash -x | ||
|
||
# Only look to the latest release to determine the previous tag -- this allows us to skip unsupported tag formats (like `version-1.0.0`) | ||
export PREVIOUS_TAG=`curl --silent "https://api.github.com/repos/$1/releases/latest" | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/'` | ||
echo "PREVIOUS_TAG=$PREVIOUS_TAG" | ||
export NEW_TAG=${GITHUB_REF/refs\/tags\//} | ||
echo "NEW_TAG=$NEW_TAG" | ||
export CHANGELOG=`git log $NEW_TAG...$PREVIOUS_TAG --oneline` | ||
echo "CHANGELOG=$CHANGELOG" | ||
|
||
#Format the changelog so it's markdown compatible | ||
CHANGELOG="${CHANGELOG//$'%'/%25}" | ||
CHANGELOG="${CHANGELOG//$'\n'/%0A}" | ||
CHANGELOG="${CHANGELOG//$'\r'/%0D}" | ||
|
||
# If the previous release tag is the same as this tag the user likely cut a release (and in the process created a tag), which means we can skip the need to create a release | ||
export SKIP_RELEASE=`[[ "$PREVIOUS_TAG" = "$NEW_TAG" ]] && echo "true" || echo "false"` | ||
|
||
# https://github.com/fsaintjacques/semver-tool/blob/master/src/semver#L5-L14 | ||
NAT='0|[1-9][0-9]*' | ||
ALPHANUM='[0-9]*[A-Za-z-][0-9A-Za-z-]*' | ||
IDENT="$NAT|$ALPHANUM" | ||
FIELD='[0-9A-Za-z-]+' | ||
SEMVER_REGEX="\ | ||
^[vV]?\ | ||
($NAT)\\.($NAT)\\.($NAT)\ | ||
(\\-(${IDENT})(\\.(${IDENT}))*)?\ | ||
(\\+${FIELD}(\\.${FIELD})*)?$" | ||
|
||
# Used in downstream steps to determine if the release should be marked as a "prerelease" and if the build should build candidate release artifacts | ||
export IS_CANDIDATE=`[[ $NEW_TAG =~ $SEMVER_REGEX && ! -z ${BASH_REMATCH[4]} ]] && echo "true" || echo "false"` | ||
|
||
# This is the version string we will pass to the build, trim off leading 'v' if present | ||
export RELEASE_VERSION=`[[ $NEW_TAG =~ $SEMVER_REGEX ]] && echo "${NEW_TAG:1}" || echo "${NEW_TAG}"` | ||
echo "RELEASE_VERSION=$RELEASE_VERSION" |
Oops, something went wrong.