This repository has been archived by the owner on Jan 19, 2024. It is now read-only.
chore: Update README.md (#455) #1290
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
name: CI | |
on: | |
# always execute docker build when something is pushed to master or release-* branches | |
push: | |
branches: | |
- "master" | |
- "main" | |
- "release-*" | |
# in addition, execute for pull requests to those branches | |
pull_request: | |
branches: | |
- "master" | |
- "main" | |
- "release-*" | |
# Allow users to manual run the CI pipeline for a specific branch, this may | |
# be needed for the integration tests as they need the generated artifacts / images | |
workflow_dispatch: # run integration tests only when triggered manually | |
defaults: | |
run: | |
shell: bash | |
jobs: | |
prepare_ci_run: | |
name: Prepare CI Run | |
# Prepare CI Run looks at what has been changed in this commit/PR/... and determines which artifacts should be | |
# built afterwards (in other jobs that depend on this one). | |
runs-on: ubuntu-20.04 | |
outputs: # declare what this job outputs (so it can be re-used for other jobs) | |
# build config | |
# metadata | |
GIT_SHA: ${{ steps.extract_branch.outputs.GIT_SHA }} | |
BRANCH: ${{ steps.extract_branch.outputs.BRANCH }} | |
BRANCH_SLUG: ${{ steps.extract_branch.outputs.BRANCH_SLUG }} | |
VERSION: ${{ steps.get_version.outputs.VERSION }} | |
DATE: ${{ steps.get_datetime.outputs.DATE }} | |
TIME: ${{ steps.get_datetime.outputs.TIME }} | |
DATETIME: ${{ steps.get_datetime.outputs.DATETIME }} | |
steps: | |
- name: Check out code | |
uses: actions/checkout@v3.1.0 | |
with: | |
fetch-depth: 0 # need to checkout "all commits" for certain features to work (e.g., get all changed files) | |
- name: Load CI Environment from .ci_env | |
id: load_ci_env | |
uses: c-py/action-dotenv-to-setenv@v4 | |
with: | |
env-file: .ci_env | |
- name: Extract branch name | |
id: extract_branch | |
# see https://github.com/keptn/gh-action-extract-branch-name for details | |
uses: keptn/gh-action-extract-branch-name@main | |
- name: "Get Previous tag" | |
id: get_previous_tag | |
uses: "WyriHaximus/github-action-get-previous-tag@v1.1" | |
with: | |
fallback: "0.0.1" | |
- name: "Get next patch version" | |
id: get_next_semver_tag | |
uses: "WyriHaximus/github-action-next-semvers@v1.1" | |
with: | |
version: ${{ steps.get_previous_tag.outputs.tag }} | |
- name: Get the version | |
id: get_version | |
env: | |
BRANCH: ${{ steps.extract_branch.outputs.BRANCH }} | |
BRANCH_SLUG: ${{ steps.extract_branch.outputs.BRANCH_SLUG }} | |
shell: bash | |
run: | | |
# determine version | |
GIT_LAST_TAG=${{ steps.get_previous_tag.outputs.tag }} | |
GIT_NEXT_TAG=${{ steps.get_next_semver_tag.outputs.patch }} | |
echo "GIT_LAST_TAG=${GIT_LAST_TAG}, GIT_NEXT_TAG=${GIT_NEXT_TAG}" | |
if [[ "$BRANCH" == "release-"* ]]; then | |
# Release Branch: extract version from branch name | |
VERSION=${BRANCH#"release-"} | |
else | |
if [[ "$BRANCH" == "master" ]]; then | |
# master branch = latest | |
VERSION="${GIT_NEXT_TAG}-dev" | |
else | |
# Feature/Development Branch - use last tag with branch slug | |
VERSION="${GIT_NEXT_TAG}-dev-${BRANCH_SLUG}" | |
fi | |
fi | |
echo "VERSION=${VERSION}" | |
echo "##[set-output name=VERSION;]$(echo ${VERSION})" | |
- name: Get current date and time | |
id: get_datetime | |
run: | | |
echo "::set-output name=DATE::$(date +'%Y%m%d')" | |
echo "::set-output name=TIME::$(date +'%H%M')" | |
echo "::set-output name=DATETIME::$(date +'%Y%m%d')$(date +'%H%M')" | |
############################################################################ | |
# Unit tests # | |
############################################################################ | |
test: | |
name: Unit Tests | |
needs: prepare_ci_run | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Check out repository | |
uses: actions/checkout@v3.1.0 | |
- name: Unit tests | |
uses: ./.github/actions/unit-tests | |
############################################################################ | |
# Build Docker Image # | |
############################################################################ | |
docker_build: | |
needs: [prepare_ci_run] | |
name: Docker Build | |
runs-on: ubuntu-20.04 | |
env: | |
VERSION: ${{ needs.prepare_ci_run.outputs.VERSION }} | |
DATETIME: ${{ needs.prepare_ci_run.outputs.DATETIME }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3.1.0 | |
- name: Load CI Environment from .ci_env | |
id: load_ci_env | |
uses: c-py/action-dotenv-to-setenv@v4 | |
with: | |
env-file: .ci_env | |
- name: Docker Build | |
id: docker_build | |
uses: keptn/gh-automation/.github/actions/docker-build@v1.6.0 | |
with: | |
TAGS: | | |
${{ env.DOCKER_ORGANIZATION }}/${{ env.IMAGE }}:${{ env.VERSION }} | |
${{ env.DOCKER_ORGANIZATION }}/${{ env.IMAGE }}:${{ env.VERSION }}.${{ env.DATETIME }} | |
BUILD_ARGS: | | |
version=${{ env.VERSION }} | |
REGISTRY_USER: ${{ secrets.REGISTRY_USER }} | |
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} | |
PUSH: ${{(github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event.pull_request.head.repo.full_name == github.repository)}} | |
- name: Docker Build Initcontainer | |
id: docker_build_initcontainer | |
uses: keptn/gh-automation/.github/actions/docker-build@v1.6.0 | |
with: | |
TAGS: | | |
${{ env.DOCKER_ORGANIZATION }}/${{ env.IMAGE_INITCONTAINER }}:${{ env.VERSION }} | |
${{ env.DOCKER_ORGANIZATION }}/${{ env.IMAGE_INITCONTAINER }}:${{ env.VERSION }}.${{ env.DATETIME }} | |
BUILD_ARGS: | | |
version=${{ env.VERSION }} | |
REGISTRY_USER: ${{ secrets.REGISTRY_USER }} | |
REGISTRY_PASSWORD: ${{ secrets.REGISTRY_PASSWORD }} | |
DOCKERFILE: ${{ env.DOCKERFILE_INITCONTAINER }} | |
PUSH: ${{(github.event_name == 'push' || github.event_name == 'workflow_dispatch' || github.event.pull_request.head.repo.full_name == github.repository)}} | |
- id: report_docker_build_to_pr | |
name: Report Docker Build to PR | |
if: (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name == github.repository) | |
uses: marocchino/sticky-pull-request-comment@v2 | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
recreate: true | |
header: test | |
message: | | |
The following Docker Images have been built: | |
* ${{ fromJSON(steps.docker_build.outputs.BUILD_METADATA)['image.name'] }} | |
* ${{ fromJSON(steps.docker_build_initcontainer.outputs.BUILD_METADATA)['image.name'] }} | |
helm_chart_build: | |
needs: [prepare_ci_run, docker_build] | |
name: Build Helm Charts | |
runs-on: ubuntu-20.04 | |
env: | |
VERSION: ${{ needs.prepare_ci_run.outputs.VERSION }} | |
DATETIME: ${{ needs.prepare_ci_run.outputs.DATETIME }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3.1.0 | |
- name: Load CI Environment from .ci_env | |
id: load_ci_env | |
uses: c-py/action-dotenv-to-setenv@v4 | |
with: | |
env-file: .ci_env | |
- name: Build Helm Charts | |
id: build_helm_charts | |
uses: keptn/gh-automation/.github/actions/build-helm-charts@v1.6.0 | |
with: | |
VERSION: ${{ env.VERSION }} | |
APP_VERSION: ${{ env.VERSION }}.${{ env.DATETIME }} | |
CHART_NAME: ${{ env.IMAGE }} | |
- name: Upload Helm Chart as an artifact | |
id: upload_helm_chart | |
uses: actions/upload-artifact@v3 | |
with: | |
name: helm-charts | |
path: installer/*.tgz | |
linter_build: | |
needs: [prepare_ci_run] | |
name: Build Linter | |
runs-on: ubuntu-20.04 | |
env: | |
VERSION: ${{ needs.prepare_ci_run.outputs.VERSION }} | |
steps: | |
- name: Checkout Code | |
uses: actions/checkout@v3.1.0 | |
- name: Set up Go | |
uses: actions/setup-go@v3.3.1 | |
with: | |
go-version-file: "go.mod" | |
- name: Run make | |
run: make build-lint | |
- name: Upload Linter binaries as an artifact | |
id: upload_helm_chart | |
uses: actions/upload-artifact@v3 | |
with: | |
name: linter | |
path: bin/job-lint-* |