2021-10-26 06:01:18 +00:00
name : build
on :
push :
# Sequence of patterns matched against refs/heads
2022-01-06 19:32:35 +00:00
branches :
# Push events on the main branch
- main
2021-10-29 05:22:38 +00:00
2021-10-26 06:01:18 +00:00
env :
PKG_NAME : consul
jobs :
get-product-version :
runs-on : ubuntu-latest
outputs :
product-version : ${{ steps.get-product-version.outputs.product-version }}
pre-version : ${{ steps.get-product-version.outputs.pre-version }}
pkg-version : ${{ steps.get-product-version.outputs.pkg-version }}
shared-ldflags : ${{ steps.shared-ldflags.outputs.shared-ldflags }}
steps :
- uses : actions/checkout@v2
- name : get product version
id : get-product-version
run : |
2021-12-15 00:11:16 +00:00
CONSUL_VERSION=$(build-support/scripts/version.sh -r)
## TODO: This assumes `make version` outputs 1.1.1+ent-prerel
IFS="+" read VERSION _other <<< "$CONSUL_VERSION"
IFS="-" read _other PREREL_VERSION <<< "$CONSUL_VERSION"
## TODO: this assumes `version.sh` outputs in the expected ordering of
## [version]+ent{-prerelease} If we need to transition to
## [version]{-prerelease}+ent before then, we'll need to add
## logic to handle presense/absence of the prerelease
echo "::set-output name=product-version::${CONSUL_VERSION}"
2021-10-26 06:01:18 +00:00
echo "::set-output name=pre-version::${PREREL_VERSION}"
echo "::set-output name=pkg-version::${VERSION}"
- name : Set shared -ldflags
id : shared-ldflags
run : echo "::set-output name=shared-ldflags::-X github.com/hashicorp/consul/version.GitCommit=${GITHUB_SHA::8} -X github.com/hashicorp/consul/version.GitDescribe=${{ steps.get-product-version.outputs.product-version }}"
generate-metadata-file :
needs : get-product-version
runs-on : ubuntu-latest
outputs :
filepath : ${{ steps.generate-metadata-file.outputs.filepath }}
steps :
- name : 'Checkout directory'
uses : actions/checkout@v2
- name : Generate metadata file
id : generate-metadata-file
2022-04-22 16:26:12 +00:00
uses : hashicorp/actions-generate-metadata@v1
2021-10-26 06:01:18 +00:00
with :
version : ${{ needs.get-product-version.outputs.product-version }}
product : ${{ env.PKG_NAME }}
- uses : actions/upload-artifact@v2
with :
name : metadata.json
path : ${{ steps.generate-metadata-file.outputs.filepath }}
build :
needs : get-product-version
runs-on : ubuntu-latest
strategy :
matrix :
include :
2022-04-14 20:55:10 +00:00
- {go : "1.18.1" , goos : "linux" , goarch : "386" }
- {go : "1.18.1" , goos : "linux" , goarch : "amd64" }
- {go : "1.18.1" , goos : "linux" , goarch : "arm" }
- {go : "1.18.1" , goos : "linux" , goarch : "arm64" }
- {go : "1.18.1" , goos : "freebsd" , goarch : "386" }
- {go : "1.18.1" , goos : "freebsd" , goarch : "amd64" }
- {go : "1.18.1" , goos : "windows" , goarch : "386" }
- {go : "1.18.1" , goos : "windows" , goarch : "amd64" }
- {go : "1.18.1" , goos : "solaris" , goarch : "amd64" }
2021-10-26 06:01:18 +00:00
fail-fast : true
name : Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build
steps :
- uses : actions/checkout@v2
- name : Setup go
uses : actions/setup-go@v2
with :
go-version : ${{ matrix.go }}
- name : Setup with node and yarn
uses : actions/setup-node@v2
with :
node-version : '14'
cache : 'yarn'
cache-dependency-path : 'ui/yarn.lock'
- name : Build UI
run : |
CONSUL_VERSION=${{ needs.get-product-version.outputs.product-version }}
CONSUL_BINARY_TYPE=${CONSUL_BINARY_TYPE}
CONSUL_COPYRIGHT_YEAR=$(git show -s --format=%cd --date=format:%Y HEAD)
echo "consul_version is ${CONSUL_VERSION}"
echo "consul binary type is ${CONSUL_BINARY_TYPE}"
echo "consul copyright year is ${CONSUL_COPYRIGHT_YEAR}"
cd ui && make && cd ..
mkdir pkg
mv ui/packages/consul-ui/dist pkg/web_ui
- name : Build static-assets
run : make static-assets
- name : Build
env :
GOOS : ${{ matrix.goos }}
GOARCH : ${{ matrix.goarch }}
CGO_ENABLED : 0
GOLDFLAGS : "${{needs.get-product-version.outputs.shared-ldflags}}"
run : |
mkdir dist out
go build -ldflags="$GOLDFLAGS" -o dist/ .
zip -r -j out/${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip dist/
- uses : actions/upload-artifact@v2
with :
name : ${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip
path : out/${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip
- name : Package
if : ${{ matrix.goos == 'linux' }}
uses : hashicorp/actions-packaging-linux@v1
with :
name : ${{ github.event.repository.name }}
description : "Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure. "
arch : ${{ matrix.goarch }}
version : ${{ needs.get-product-version.outputs.product-version }}
maintainer : "HashiCorp"
homepage : "https://github.com/hashicorp/consul"
license : "MPL-2.0"
binary : "dist/${{ env.PKG_NAME }}"
deb_depends : "openssl"
rpm_depends : "openssl"
config_dir : ".release/linux/package"
preinstall : ".release/linux/preinstall"
postinstall : ".release/linux/postinstall"
2022-02-01 20:07:18 +00:00
preremove : ".release/linux/preremove"
2021-10-26 06:01:18 +00:00
postremove : ".release/linux/postremove"
- name : Set Package Names
if : ${{ matrix.goos == 'linux' }}
run : |
echo "RPM_PACKAGE=$(basename out/*.rpm)" >> $GITHUB_ENV
echo "DEB_PACKAGE=$(basename out/*.deb)" >> $GITHUB_ENV
- uses : actions/upload-artifact@v2
if : ${{ matrix.goos == 'linux' }}
with :
name : ${{ env.RPM_PACKAGE }}
path : out/${{ env.RPM_PACKAGE }}
- uses : actions/upload-artifact@v2
if : ${{ matrix.goos == 'linux' }}
with :
name : ${{ env.DEB_PACKAGE }}
path : out/${{ env.DEB_PACKAGE }}
build-darwin :
needs : get-product-version
runs-on : macos-latest
strategy :
matrix :
goos : [ darwin ]
2021-12-15 01:46:04 +00:00
goarch : [ "amd64" , "arm64" ]
2022-04-14 20:55:10 +00:00
go : [ "1.18.1" ]
2021-10-26 06:01:18 +00:00
fail-fast : true
name : Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build
steps :
- uses : actions/checkout@v2
- name : Setup go
uses : actions/setup-go@v2
with :
go-version : ${{ matrix.go }}
- name : Setup with node and yarn
uses : actions/setup-node@v2
with :
node-version : '14'
cache : 'yarn'
cache-dependency-path : 'ui/yarn.lock'
- name : Build UI
run : |
CONSUL_VERSION=${{ needs.get-product-version.outputs.product-version }}
CONSUL_BINARY_TYPE=${CONSUL_BINARY_TYPE}
CONSUL_COPYRIGHT_YEAR=$(git show -s --format=%cd --date=format:%Y HEAD)
echo "consul_version is ${CONSUL_VERSION}"
echo "consul binary type is ${CONSUL_BINARY_TYPE}"
echo "consul copyright year is ${CONSUL_COPYRIGHT_YEAR}"
cd ui && make && cd ..
mkdir pkg
mv ui/packages/consul-ui/dist pkg/web_ui
- name : Build static-assets
run : make static-assets
- name : Build
env :
GOOS : ${{ matrix.goos }}
GOARCH : ${{ matrix.goarch }}
GOLDFLAGS : "${{ needs.get-product-version.outputs.shared-ldflags }}"
run : |
mkdir dist out
2022-01-24 22:34:57 +00:00
go build -ldflags="$GOLDFLAGS" -tags netcgo -o dist/ .
2021-10-26 06:01:18 +00:00
zip -r -j out/${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip dist/
- uses : actions/upload-artifact@v2
with :
name : ${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip
path : out/${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_${{ matrix.goos }}_${{ matrix.goarch }}.zip
build-docker :
name : Docker ${{ matrix.arch }} build
needs :
- get-product-version
- build
runs-on : ubuntu-latest
strategy :
matrix :
arch : [ "arm" , "arm64" , "386" , "amd64" ]
env :
repo : ${{github.event.repository.name}}
version : ${{needs.get-product-version.outputs.product-version}}
steps :
- uses : actions/checkout@v2
2022-05-27 18:50:41 +00:00
- name : Download artifact for arm verification
uses : actions/download-artifact@v2
if : ${{ matrix.arch == 'arm64' || matrix.arch == 'arm' }}
with :
name : ${{ env.PKG_NAME }}_${{env.version}}_linux_${{ matrix.arch }}.zip
- name : Unzip for ${{ matrix.arch }} linux zip
if : ${{ matrix.arch == 'arm64' || matrix.arch == 'arm' }}
run : |
unzip ${{ env.PKG_NAME }}_${{ env.version }}_linux_${{ matrix.arch }}.zip
2021-10-26 06:01:18 +00:00
- name : Docker Build (Action)
uses : hashicorp/actions-docker-build@v1
with :
version : ${{env.version}}
target : default
arch : ${{matrix.arch}}
tags : |
docker.io/hashicorp/${{env.repo}}:${{env.version}}
2021-12-15 21:17:16 +00:00
public.ecr.aws/hashicorp/${{env.repo}}:${{env.version}}
2022-05-17 19:23:03 +00:00
dev_tags : |
2022-05-24 22:23:01 +00:00
docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }}
2022-05-17 19:23:03 +00:00
docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }}-${{ github.sha }}
2022-05-27 20:29:57 +00:00
smoke_test : .github/scripts/docker_smoke.sh
2022-05-27 18:50:41 +00:00
- name : Run verification in qemu docker for ${{ matrix.arch }} linux zip
if : ${{ matrix.arch == 'arm64' }}
run : |
docker run --platform=linux/arm64 -v $(pwd):/workdir -w /workdir \
arm64v8/debian ./consul version
- name : Run verification in qemu docker for ${{ matrix.arch }} linux zip
if : ${{ matrix.arch == 'arm' }}
run : |
docker run --platform=linux/arm/v7 -v $(pwd):/workdir -w /workdir \
arm32v7/debian ./consul version
2022-05-26 16:49:47 +00:00
build-docker-redhat :
name : Docker Build UBI Image for RedHat
needs :
- get-product-version
- build
runs-on : ubuntu-latest
env :
repo : ${{github.event.repository.name}}
version : ${{needs.get-product-version.outputs.product-version}}
steps :
- uses : actions/checkout@v2
- uses : hashicorp/actions-docker-build@v1
with :
version : ${{env.version}}
target : ubi
arch : amd64
2022-05-27 18:50:41 +00:00
redhat_tag : scan.connect.redhat.com/ospid-612d01d49f14588c41ebf67c/${{env.repo}}:${{env.version}}-ubi
2022-05-27 20:29:57 +00:00
smoke_test : .github/scripts/docker_smoke.sh
2022-05-27 18:50:41 +00:00
verify :
needs :
- get-product-version
- build
runs-on : ubuntu-latest
strategy :
matrix :
arch : [ "386" , "amd64" ]
fail-fast : true
env :
version : ${{needs.get-product-version.outputs.product-version}}
name : Verify ${{ matrix.arch }} linux zip
steps :
- uses : actions/checkout@v2
- name : Download artifact
uses : actions/download-artifact@v2
with :
name : ${{ env.PKG_NAME }}_${{ env.version }}_linux_${{ matrix.arch }}.zip
- name : Run verification for ${{ matrix.arch }} linux zip
run : |
unzip ${{ env.PKG_NAME }}_${{env.version}}_linux_${{ matrix.arch }}.zip
./consul version
verify-darwin :
needs :
- get-product-version
- build-darwin
runs-on : macos-latest
strategy :
matrix :
arch : [ "amd64" , "arm64" ]
fail-fast : true
env :
version : ${{needs.get-product-version.outputs.product-version}}
name : Verify ${{ matrix.arch }} darwin zip
steps :
- uses : actions/checkout@v2
- name : Download artifact
uses : actions/download-artifact@v2
with :
name : ${{ env.PKG_NAME }}_${{env.version}}_darwin_${{ matrix.arch }}.zip
- name : Run verification for ${{ matrix.arch }} linux zip
if : ${{ matrix.arch == 'amd64' }}
run : |
unzip ${{ env.PKG_NAME }}_${{env.version}}_darwin_${{ matrix.arch }}.zip
./consul version
verify-linux-packages-deb :
needs : build
runs-on : ubuntu-latest
strategy :
matrix :
arch : [ "amd64" , "arm" , "arm64" , "i386" ]
fail-fast : true
name : Verify ${{ matrix.arch }} debian package
steps :
- uses : actions/checkout@v2
- name : Download ${{ matrix.arch }} debian package
run : |
echo "TODO: download ${{ matrix.arch }} debian package"
- name : Verify ${{ matrix.arch }} debian package
run : |
echo "TODO: run verification for ${{ matrix.arch }} debian package"
verify-linux-packages-rpm :
needs : build
runs-on : ubuntu-latest
strategy :
matrix :
arch : [ "aarch64" , "arm" , "i386" , "x86_64" ]
fail-fast : true
name : Verify ${{ matrix.arch }} rpm package
steps :
- uses : actions/checkout@v2
- name : Download ${{ matrix.arch }} rpm package
run : |
echo "TODO: download ${{ matrix.arch }} rpm package"
- name : Verify ${{ matrix.arch }} rpm package
run : |
echo "TODO: run verification for ${{ matrix.arch }} rpm package"