Merge pull request #28 from zimnx/mz/bump-dependencies #227
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
# Copyright (C) 2021 ScyllaDB | |
name: Build & Test | |
on: | |
push: | |
# Restrict the branches to only those we want to promote from. | |
branches: | |
- 'master' | |
- 'v[0-9]+.[0-9]+' | |
# Act only on temporary tags, the final ones are created by manually promoting | |
# an existing candidate image, after it goes through QA. We need to be carefully | |
# to avoid overwriting those, building from the same sources may not result | |
# in the same image content that was tested, e.g. if a base image changed in the meantime. | |
tags: | |
- 'v[0-9]+.[0-9]+.[0-9]+-alpha.[0-9]+' | |
- 'v[0-9]+.[0-9]+.[0-9]+-beta.[0-9]+' | |
- 'v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+' | |
pull_request: | |
branches: | |
- '**' | |
types: | |
- opened | |
- edited | |
- reopened | |
- synchronize | |
env: | |
go_version: 1.21 | |
GOPATH: ${{ github.workspace }}/go | |
git_repo_path: ${{ github.workspace }}/go/src/github.com/scylladb/k8s-local-volume-provisioner | |
image_repo_ref: docker.io/scylladb/k8s-local-volume-provisioner | |
retention_days: 7 | |
defaults: | |
run: | |
shell: bash | |
working-directory: "./go/src/github.com/scylladb/k8s-local-volume-provisioner" | |
jobs: | |
verify: | |
name: Verify | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
- name: Setup go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: ${{ env.go_version }} | |
- name: Verify | |
run: make verify --warn-undefined-variables | |
verify-deps: | |
name: Verify dependencies | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
- name: Setup go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: ${{ env.go_version }} | |
- name: Verify dependencies | |
run: make verify-deps --warn-undefined-variables | |
build-and-test: | |
name: Build and test | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
fetch-depth: 0 | |
- name: Setup git tags | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: ./hack/ci-detect-tags.sh | |
- name: Setup go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: ${{ env.go_version }} | |
- name: Build | |
run: make --warn-undefined-variables | |
- name: Make sure new unit tests aren't flaky | |
if: ${{ github.event_name == 'pull_request' }} | |
run: | | |
echo "GO_TEST_COUNT=-count=3" | tee -a ${GITHUB_ENV} | |
echo "GINKGO_TEST_COUNT=-repeat=3" | tee -a ${GITHUB_ENV} | |
- name: Test | |
run: make test --warn-undefined-variables | |
images: | |
name: Build images | |
runs-on: ubuntu-22.04 | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
fetch-depth: 0 | |
- name: Setup git tags | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: ./hack/ci-detect-tags.sh | |
- name: Build image | |
run: | | |
set -euExo pipefail | |
shopt -s inherit_errexit | |
# Avoid podman permission error on Ubuntu 20.04 by using it as root, although it shouldn't be needed. | |
# Use --format=docker to support SHELL instruction in the Dockerfile. (SHELL didn't make it to OCI spec.) | |
sudo podman --cgroup-manager=cgroupfs build --format=docker --squash --network=none -f ./Dockerfile -t '${{ env.image_repo_ref }}:ci' . | |
sudo podman images '${{ env.image_repo_ref }}:ci' | |
sudo podman save '${{ env.image_repo_ref }}:ci' | lz4 - ~/driverimage.tar.lz4 | |
- name: Upload image artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: driverimage.tar.lz4 | |
path: ~/driverimage.tar.lz4 | |
if-no-files-found: error | |
retention-days: ${{ env.retention_days }} | |
test-e2e-serial: | |
name: Test e2e serial | |
runs-on: ubuntu-22.04 | |
needs: images | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
fetch-depth: 0 | |
- name: Run e2e | |
uses: ./go/src/github.com/scylladb/k8s-local-volume-provisioner/.github/actions/run-e2e | |
with: | |
repositoryPath: ${{ env.git_repo_path }} | |
jobSuffix: "serial" | |
suite: "conformance/serial" | |
test-e2e-parallel: | |
name: Test e2e parallel | |
runs-on: ubuntu-22.04 | |
needs: images | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
fetch-depth: 0 # also fetch tags | |
- name: Run e2e | |
uses: ./go/src/github.com/scylladb/k8s-local-volume-provisioner/.github/actions/run-e2e | |
with: | |
repositoryPath: ${{ env.git_repo_path }} | |
jobSuffix: "parallel" | |
suite: "conformance/parallel" | |
success: | |
name: All tests successfull | |
runs-on: ubuntu-22.04 | |
needs: | |
- verify | |
- verify-deps | |
- build-and-test | |
- images | |
- test-e2e-serial | |
- test-e2e-parallel | |
steps: | |
- name: Always succeed | |
working-directory: . | |
run: true | |
promote: | |
name: Promote artifacts | |
runs-on: ubuntu-22.04 | |
needs: [success] | |
if: ${{ github.event_name != 'pull_request' }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
path: ${{ env.git_repo_path }} | |
fetch-depth: 0 | |
- name: Setup git tags | |
if: ${{ startsWith(github.ref, 'refs/tags/') }} | |
run: ./hack/ci-detect-tags.sh | |
- name: Setup go | |
uses: actions/setup-go@v3 | |
with: | |
go-version: ${{ env.go_version }} | |
- name: Determine promotion tag | |
run: | | |
set -euExo pipefail | |
shopt -s inherit_errexit | |
source ./hack/lib/tag-from-gh-ref.sh | |
CI_IMAGE_TAG=$( tag_from_gh_ref "${GITHUB_REF}" ) | |
echo "CI_IMAGE_TAG=${CI_IMAGE_TAG}" | tee -a ${GITHUB_ENV} | |
- uses: actions/download-artifact@v3 | |
with: | |
name: driverimage.tar.lz4 | |
path: ~/ | |
- name: Load image | |
run: | | |
set -euExo pipefail | |
shopt -s inherit_errexit | |
unlz4 ~/driverimage.tar.lz4 - | docker load | |
# docker looses the registry part on save/load | |
docker tag "$( echo "${image_repo_ref}:ci" | sed -E -e 's~[^/]+/(.*)~\1~' )" "${image_repo_ref}:ci" | |
docker images '${{ env.image_repo_ref }}:ci' | |
- name: Login to DockerHub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_TOKEN }} | |
- name: Promote image | |
run: | | |
set -euExo pipefail | |
shopt -s inherit_errexit | |
docker tag '${{ env.image_repo_ref }}:ci' '${{ env.image_repo_ref }}:${{ env.CI_IMAGE_TAG }}' | |
docker push '${{ env.image_repo_ref }}:${{ env.CI_IMAGE_TAG }}' | |
failure-notifications: | |
name: Failure notifications | |
runs-on: ubuntu-22.04 | |
needs: | |
- success | |
- promote | |
if: ${{ failure() && github.event_name != 'pull_request' }} | |
steps: | |
- name: Report failures to Slack | |
if: ${{ always() }} | |
working-directory: . | |
run: | | |
# We have to avoid printing the secret to logs. | |
set -euExo pipefail | |
shopt -s inherit_errexit | |
curl -X POST -H 'Content-type: application/json' --data @<( cat <<-EOF | |
{ | |
"text": ":warning: CI workflow \"${{ github.workflow }}\" triggered on \"${{ github.event_name }}\" event from ${{ github.ref }} (${{ github.sha }}) failed!\n:fire_extinguisher: See https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} for details.:fire:" | |
} | |
EOF | |
) '${{ secrets.SLACK_WEBHOOK_URL }}' |