2022-11-18 21:43:55 +00:00
---
2021-12-06 16:06:22 +00:00
name : build
2022-06-06 15:47:55 +00:00
on :
workflow_dispatch :
2022-11-11 20:14:43 +00:00
pull_request :
2023-05-01 17:52:41 +00:00
# The default types for pull_request are [ opened, synchronize, reopened ].
# This is insufficient for our needs, since we're skipping stuff on PRs in
# draft mode. By adding the ready_for_review type, when a draft pr is marked
# ready, we run everything, including the stuff we'd have skipped up until now.
types : [ opened, synchronize, reopened, ready_for_review ]
2022-11-11 20:14:43 +00:00
push :
branches :
- main
- release/**
2021-12-06 16:06:22 +00:00
jobs :
2023-04-21 14:58:47 +00:00
# verify-changes determines if the changes are only for docs (website)
verify-changes :
2023-05-01 17:52:41 +00:00
if : github.event.pull_request.draft == false
2023-04-21 14:58:47 +00:00
runs-on : ubuntu-latest
outputs :
is_docs_change : ${{ steps.get-changeddir.outputs.is_docs_change }}
steps :
2023-05-22 17:18:06 +00:00
- uses : actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
2023-05-08 19:03:23 +00:00
with :
ref : ${{ github.event.pull_request.head.sha }}
fetch-depth : 0 # Use fetch depth 0 for comparing changes to base branch
2023-04-21 14:58:47 +00:00
- name : Get changed directories
id : get-changeddir
env :
TYPE : ${{ github.event_name }}
REF_NAME : ${{ github.ref_name }}
BASE : ${{ github.base_ref }}
2023-05-08 19:03:23 +00:00
run : ./.github/scripts/verify_changes.sh ${{ env.TYPE }} ${{ env.REF_NAME }} ${{ env.BASE }}
2023-04-21 14:58:47 +00:00
2022-08-23 19:53:41 +00:00
product-metadata :
2023-04-21 14:58:47 +00:00
# do not run build and test steps for docs changes
# Following https://docs.github.com/en/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/troubleshooting-required-status-checks#handling-skipped-but-required-checks
# we conditionally skip the build and tests for docs(website) changes
if : ${{ needs.verify-changes.outputs.is_docs_change == 'false' }}
2021-12-06 16:06:22 +00:00
runs-on : ubuntu-latest
2023-04-21 14:58:47 +00:00
needs : verify-changes
2021-12-06 16:06:22 +00:00
outputs :
2022-11-11 20:14:43 +00:00
build-date : ${{ steps.get-metadata.outputs.build-date }}
filepath : ${{ steps.generate-metadata-file.outputs.filepath }}
go-version : ${{ steps.get-metadata.outputs.go-version }}
2022-12-12 20:46:04 +00:00
matrix-test-group : ${{ steps.get-metadata.outputs.matrix-test-group }}
2022-11-11 20:14:43 +00:00
package-name : ${{ steps.get-metadata.outputs.package-name }}
vault-revision : ${{ steps.get-metadata.outputs.vault-revision }}
vault-version : ${{ steps.get-metadata.outputs.vault-version }}
vault-base-version : ${{ steps.get-metadata.outputs.vault-base-version }}
2021-12-06 16:06:22 +00:00
steps :
2023-05-22 17:18:06 +00:00
- uses : actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
2022-11-11 20:14:43 +00:00
- name : Get metadata
id : get-metadata
2022-12-12 20:46:04 +00:00
env :
# MATRIX_MAX_TEST_GROUPS is required to determine the randomly selected
# test group. It should be set to the highest test_group used in the
# enos-run-matrices.
MATRIX_MAX_TEST_GROUPS : 5
2022-04-19 18:28:08 +00:00
run : |
2023-03-22 19:02:06 +00:00
# shellcheck disable=SC2129
echo "build-date=$(make ci-get-date)" >> "$GITHUB_OUTPUT"
echo "go-version=$(cat ./.go-version)" >> "$GITHUB_OUTPUT"
echo "matrix-test-group=$(make ci-get-matrix-group-id)" >> "$GITHUB_OUTPUT"
echo "package-name=vault" >> "$GITHUB_OUTPUT"
echo "vault-base-version=$(make ci-get-version-base)" >> "$GITHUB_OUTPUT"
echo "vault-revision=$(make ci-get-revision)" >> "$GITHUB_OUTPUT"
echo "vault-version=$(make ci-get-version)" >> "$GITHUB_OUTPUT"
2022-11-11 20:14:43 +00:00
- uses : hashicorp/actions-generate-metadata@v1
2021-12-06 16:06:22 +00:00
id : generate-metadata-file
with :
2022-11-11 20:14:43 +00:00
version : ${{ steps.get-metadata.outputs.vault-version }}
product : ${{ steps.get-metadata.outputs.package-name }}
2023-05-22 17:18:06 +00:00
- uses : actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2
2021-12-06 16:06:22 +00:00
with :
name : metadata.json
path : ${{ steps.generate-metadata-file.outputs.filepath }}
2022-11-11 20:14:43 +00:00
if-no-files-found : error
2021-12-06 16:06:22 +00:00
build-other :
2023-01-30 22:01:51 +00:00
name : Other
2022-11-11 20:14:43 +00:00
needs : product-metadata
2021-12-06 16:06:22 +00:00
strategy :
matrix :
2022-11-11 20:14:43 +00:00
goos : [ freebsd, windows, netbsd, openbsd, solaris]
goarch : [ 386 , amd64, arm]
2021-12-06 16:06:22 +00:00
exclude :
- goos : solaris
goarch : 386
- goos : solaris
goarch : arm
- goos : windows
goarch : arm
fail-fast : true
2022-11-11 20:14:43 +00:00
uses : ./.github/workflows/build-vault-oss.yml
with :
create-packages : false
goarch : ${{ matrix.goarch }}
goos : ${{ matrix.goos }}
go-tags : ui
go-version : ${{ needs.product-metadata.outputs.go-version }}
package-name : ${{ needs.product-metadata.outputs.package-name }}
vault-version : ${{ needs.product-metadata.outputs.vault-version }}
secrets : inherit
2021-12-06 16:06:22 +00:00
build-linux :
2023-01-30 22:01:51 +00:00
name : Linux
2022-11-11 20:14:43 +00:00
needs : product-metadata
2021-12-06 16:06:22 +00:00
strategy :
matrix :
goos : [ linux]
2022-11-11 20:14:43 +00:00
goarch : [ arm, arm64, 386, amd64]
2021-12-06 16:06:22 +00:00
fail-fast : true
2022-11-11 20:14:43 +00:00
uses : ./.github/workflows/build-vault-oss.yml
with :
goarch : ${{ matrix.goarch }}
goos : ${{ matrix.goos }}
go-tags : ui
go-version : ${{ needs.product-metadata.outputs.go-version }}
package-name : ${{ needs.product-metadata.outputs.package-name }}
vault-version : ${{ needs.product-metadata.outputs.vault-version }}
secrets : inherit
2021-12-06 16:06:22 +00:00
build-darwin :
2023-01-30 22:01:51 +00:00
name : Darwin
2022-11-11 20:14:43 +00:00
needs : product-metadata
2021-12-06 16:06:22 +00:00
strategy :
matrix :
2022-11-11 20:14:43 +00:00
goos : [ darwin]
goarch : [ amd64, arm64]
2021-12-06 16:06:22 +00:00
fail-fast : true
2022-11-11 20:14:43 +00:00
uses : ./.github/workflows/build-vault-oss.yml
with :
create-packages : false
goarch : ${{ matrix.goarch }}
goos : ${{ matrix.goos }}
go-tags : ui netcgo
go-version : ${{ needs.product-metadata.outputs.go-version }}
package-name : ${{ needs.product-metadata.outputs.package-name }}
vault-version : ${{ needs.product-metadata.outputs.vault-version }}
secrets : inherit
2021-12-06 16:06:22 +00:00
build-docker :
2023-01-30 22:01:51 +00:00
name : Docker image
2021-12-06 16:06:22 +00:00
needs :
2022-08-23 19:53:41 +00:00
- product-metadata
2021-12-06 16:06:22 +00:00
- build-linux
runs-on : ubuntu-latest
strategy :
matrix :
2022-11-11 20:14:43 +00:00
arch : [ arm, arm64, 386, amd64]
2021-12-06 16:06:22 +00:00
steps :
2023-05-22 17:18:06 +00:00
- uses : actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
2022-11-11 20:14:43 +00:00
- uses : hashicorp/actions-docker-build@v1
2021-12-06 16:06:22 +00:00
with :
2023-01-30 22:01:51 +00:00
version : ${{ needs.product-metadata.outputs.vault-version }}
2021-12-06 16:06:22 +00:00
target : default
2022-11-11 20:14:43 +00:00
arch : ${{ matrix.arch }}
2023-01-30 22:01:51 +00:00
zip_artifact_name : vault_${{ needs.product-metadata.outputs.vault-version }}_linux_${{ matrix.arch }}.zip
2021-12-06 16:06:22 +00:00
tags : |
2023-01-30 22:01:51 +00:00
docker.io/hashicorp/${{ github.event.repository.name }}:${{ needs.product-metadata.outputs.vault-version }}
public.ecr.aws/hashicorp/${{ github.event.repository.name }}:${{ needs.product-metadata.outputs.vault-version }}
2022-10-19 18:26:31 +00:00
2022-05-13 15:21:15 +00:00
build-ubi :
2023-01-30 22:01:51 +00:00
name : UBI image
2022-05-13 15:21:15 +00:00
needs :
2022-08-23 19:53:41 +00:00
- product-metadata
2022-05-13 15:21:15 +00:00
- build-linux
runs-on : ubuntu-latest
strategy :
matrix :
2022-11-11 20:14:43 +00:00
arch : [ amd64]
2022-05-13 15:21:15 +00:00
steps :
2023-05-22 17:18:06 +00:00
- uses : actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
2022-11-11 20:14:43 +00:00
- uses : hashicorp/actions-docker-build@v1
2022-05-13 15:21:15 +00:00
with :
2023-01-30 22:01:51 +00:00
version : ${{ needs.product-metadata.outputs.vault-version }}
2022-05-13 15:21:15 +00:00
target : ubi
2022-11-11 20:14:43 +00:00
arch : ${{ matrix.arch }}
2023-01-30 22:01:51 +00:00
zip_artifact_name : vault_${{ needs.product-metadata.outputs.vault-version }}_linux_${{ matrix.arch }}.zip
redhat_tag : quay.io/redhat-isv-containers/5f89bb5e0b94cf64cfeb500a:${{ needs.product-metadata.outputs.vault-version }}-ubi
2022-08-23 19:53:41 +00:00
2022-12-12 20:46:04 +00:00
test :
name : Test ${{ matrix.build-artifact-name }}
2023-05-08 19:03:23 +00:00
# Only run the Enos workflow against branches that are created from the
# hashicorp/vault repository. This has the effect of limiting execution of
# Enos scenarios to branches that originate from authors that have write
# access to hashicorp/vault repository. This is required as Github Actions
# will not populate the required secrets for branches created by outside
# contributors in order to protect the secrets integrity.
# This condition can be removed in future if enos workflow is updated to
# workflow_run event
if : "! github.event.pull_request.head.repo.fork"
2022-08-23 19:53:41 +00:00
needs :
- product-metadata
- build-linux
2023-01-18 23:37:38 +00:00
uses : ./.github/workflows/test-run-enos-scenario-matrix.yml
2022-12-12 20:46:04 +00:00
strategy :
fail-fast : false
matrix :
include :
- matrix-file-name : build-github-oss-linux-amd64-zip
build-artifact-name : vault_${{ needs.product-metadata.outputs.vault-version }}_linux_amd64.zip
- matrix-file-name : build-github-oss-linux-arm64-zip
build-artifact-name : vault_${{ needs.product-metadata.outputs.vault-version }}_linux_arm64.zip
2022-08-23 19:53:41 +00:00
with :
2022-12-12 20:46:04 +00:00
build-artifact-name : ${{ matrix.build-artifact-name }}
matrix-file-name : ${{ matrix.matrix-file-name }}
matrix-test-group : ${{ needs.product-metadata.outputs.matrix-test-group }}
vault-edition : oss
vault-revision : ${{ needs.product-metadata.outputs.vault-revision }}
2023-01-18 21:09:19 +00:00
ssh-key-name : ${{ github.event.repository.name }}-ci-ssh-key
2022-11-11 20:14:43 +00:00
secrets : inherit
2022-12-12 20:46:04 +00:00
test-docker-k8s :
name : Test Docker K8s
2023-05-08 19:03:23 +00:00
# Only run the Enos workflow against branches that are created from the
# hashicorp/vault repository. This has the effect of limiting execution of
# Enos scenarios to branches that originate from authors that have write
# access to hashicorp/vault repository. This is required as Github Actions
# will not populate the required secrets for branches created by outside
# contributors in order to protect the secrets integrity.
# GHA secrets are only ready on workflow_run for public repo
# This condition can be removed in future if enos workflow is updated to
# workflow_run event
if : "! github.event.pull_request.head.repo.fork"
2022-11-11 20:14:43 +00:00
needs :
- product-metadata
- build-docker
uses : ./.github/workflows/enos-run-k8s.yml
with :
artifact-build-date : ${{ needs.product-metadata.outputs.build-date }}
artifact-name : ${{ github.event.repository.name }}_default_linux_amd64_${{ needs.product-metadata.outputs.vault-version }}_${{ needs.product-metadata.outputs.vault-revision }}.docker.tar
artifact-revision : ${{ needs.product-metadata.outputs.vault-revision }}
artifact-version : ${{ needs.product-metadata.outputs.vault-version }}
2022-08-23 19:53:41 +00:00
secrets : inherit
2022-11-18 21:43:55 +00:00
completed-successfully :
2023-04-26 19:16:31 +00:00
# We force a failure if any of the dependent jobs fail,
# this is a workaround for the issue reported https://github.com/actions/runner/issues/2566
if : |
always() && (cancelled() ||
contains(needs.*.result, 'cancelled') ||
contains(needs.*.result, 'failure'))
2022-11-18 21:43:55 +00:00
runs-on : ubuntu-latest
needs :
- build-other
- build-linux
- build-darwin
- build-docker
- build-ubi
2022-12-12 20:46:04 +00:00
- test
- test-docker-k8s
2022-11-18 21:43:55 +00:00
steps :
2023-04-26 19:16:31 +00:00
- run : |
echo "Some of the required build and test workflows have failed!"
exit 1