mirror of
https://github.com/status-im/consul.git
synced 2025-02-02 08:56:43 +00:00
f0a9b30174
Replace bindata packages with stdlib go:embed. Modernize some uiserver code with newer interfaces introduced in go 1.16 (mainly working with fs.File instead of http.File. Remove steps that are no longer used from our build files. Add Github Action to detect differences in agent/uiserver/dist and verify that the files are correct (by compiling UI assets and comparing contents).
366 lines
13 KiB
YAML
366 lines
13 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
# Sequence of patterns matched against refs/heads
|
|
branches:
|
|
# Push events on the main branch
|
|
- main
|
|
|
|
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: |
|
|
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}"
|
|
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
|
|
uses: hashicorp/actions-generate-metadata@v1
|
|
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:
|
|
- {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"}
|
|
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 ..
|
|
rm -rf agent/uiserver/dist
|
|
mv ui/packages/consul-ui/dist agent/uiserver/
|
|
- 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"
|
|
preremove: ".release/linux/preremove"
|
|
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 ]
|
|
goarch: [ "amd64", "arm64" ]
|
|
go: [ "1.18.1" ]
|
|
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 ..
|
|
rm -rf agent/uiserver/dist
|
|
mv ui/packages/consul-ui/dist agent/uiserver/
|
|
|
|
- name: Build
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
GOLDFLAGS: "${{ needs.get-product-version.outputs.shared-ldflags }}"
|
|
run: |
|
|
mkdir dist out
|
|
go build -ldflags="$GOLDFLAGS" -tags netcgo -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
|
|
|
|
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
|
|
- 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
|
|
- 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}}
|
|
public.ecr.aws/hashicorp/${{env.repo}}:${{env.version}}
|
|
dev_tags: |
|
|
docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }}
|
|
docker.io/hashicorppreview/${{ env.repo }}:${{ env.version }}-${{ github.sha }}
|
|
smoke_test: .github/scripts/docker_smoke.sh
|
|
- 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
|
|
|
|
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
|
|
redhat_tag: scan.connect.redhat.com/ospid-612d01d49f14588c41ebf67c/${{env.repo}}:${{env.version}}-ubi
|
|
smoke_test: .github/scripts/docker_smoke.sh
|
|
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"
|