These github actions run on Ubuntu based machine. Ubuntu by default
links `/bin/sh` to dash. So by invoking the plugin.sh script as `/bin/sh
./plugins.sh` the script would run under `dash` despite the shebang
line. A recent change that unified some of the build process, introduced
additional bashisms into this script which is caused the build to fail.
This updated the build system to just run the script directly, which
will honor the shebang line. This seems like the best approach since the
ubuntu machine has bash and the shebang line points to bash, so it is
natural for developers to assume bashisms will work.
See:
f370abc1da
https://github.com/actions/virtual-environments/blob/ubuntu20/20220410.2/images/linux/Ubuntu2004-Readme.md
https://wiki.ubuntu.com/DashAsBinSh
321 lines
11 KiB
YAML
321 lines
11 KiB
YAML
name: build
|
|
|
|
on:
|
|
push:
|
|
# Sequence of patterns matched against refs/heads
|
|
branches:
|
|
# Push events on main branch
|
|
- 'main'
|
|
|
|
env:
|
|
PKG_NAME: "boundary"
|
|
|
|
jobs:
|
|
get-product-version:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
product-version: ${{ steps.get-product-version.outputs.product-version }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Setup go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: "1.17.5"
|
|
- name: get product version
|
|
id: get-product-version
|
|
run: |
|
|
make version
|
|
echo "::set-output name=product-version::$(make 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@main
|
|
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 }}
|
|
|
|
set-ld-flags:
|
|
needs: get-product-version
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
ldflags: ${{ steps.generate-ld-flags.outputs.ldflags }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: 'Generate ld flags'
|
|
id: generate-ld-flags
|
|
run: |
|
|
project="$(go list -m)"
|
|
sha="$(git rev-parse HEAD)"
|
|
echo "::set-output name=ldflags::"-s -w -X \'$project/version.GitCommit=$sha\'""
|
|
|
|
build-other:
|
|
needs:
|
|
- get-product-version
|
|
- set-ld-flags
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
goos: [ freebsd, windows, netbsd, openbsd, solaris ]
|
|
goarch: [ "386", "amd64", "arm" ]
|
|
go: [ "1.17.5" ]
|
|
exclude:
|
|
- goos: solaris
|
|
goarch: 386
|
|
- goos: solaris
|
|
goarch: arm
|
|
- goos: windows
|
|
goarch: arm
|
|
fail-fast: true
|
|
|
|
name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build
|
|
env:
|
|
GOPRIVATE: "github.com/hashicorp"
|
|
GO111MODULE: on
|
|
LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }}
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Setup go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go }}
|
|
- name: Setup Git
|
|
run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com"
|
|
- name: Set sha
|
|
id: set-sha
|
|
run: echo "::set-output name=sha::$(head -n1 internal/ui/VERSION | cut -d ' ' -f1)"
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
repository: "hashicorp/boundary-ui"
|
|
ref: ${{ steps.set-sha.outputs.sha }}
|
|
path: "internal/ui/.tmp/boundary-ui"
|
|
- name: Setup node and yarn
|
|
uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '14'
|
|
cache: 'yarn'
|
|
cache-dependency-path: 'internal/ui/.tmp/boundary-ui/yarn.lock'
|
|
- name: Install Yarn
|
|
run: |
|
|
npm install -g yarn
|
|
- name: UI Build
|
|
working-directory: internal/ui/.tmp/boundary-ui
|
|
run: |
|
|
yarn install --network-timeout 300000
|
|
yarn build:ui:admin
|
|
- name: Go Build
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
CGO_ENABLED: 0
|
|
run: |
|
|
mkdir -p dist out
|
|
unset GOPATH;
|
|
# Build plugins
|
|
./scripts/plugins.sh
|
|
go build -v -tags "ui" -ldflags "${{ env.LD_FLAGS }}" -o dist/ ./cmd/boundary
|
|
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-linux:
|
|
needs:
|
|
- get-product-version
|
|
- set-ld-flags
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
goos: [linux]
|
|
goarch: ["arm", "arm64", "386", "amd64"]
|
|
go: [ "1.17.5" ]
|
|
fail-fast: true
|
|
|
|
name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build
|
|
|
|
env:
|
|
GOPRIVATE: "github.com/hashicorp"
|
|
GO111MODULE: on
|
|
LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Setup Git
|
|
run: git config --global url."https://${{ secrets.ELEVATED_GITHUB_TOKEN }}:@github.com".insteadOf "https://github.com"
|
|
- name: Setup go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go }}
|
|
- name: Set sha
|
|
id: set-sha
|
|
run: echo "::set-output name=sha::$(head -n1 internal/ui/VERSION | cut -d ' ' -f1)"
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
repository: "hashicorp/boundary-ui"
|
|
ref: ${{ steps.set-sha.outputs.sha }}
|
|
path: "internal/ui/.tmp/boundary-ui"
|
|
- name: Setup node and yarn
|
|
uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '14'
|
|
cache: 'yarn'
|
|
cache-dependency-path: 'internal/ui/.tmp/boundary-ui/yarn.lock'
|
|
- name: Install Yarn
|
|
run: |
|
|
npm install -g yarn
|
|
- name: UI Build
|
|
working-directory: internal/ui/.tmp/boundary-ui
|
|
run: |
|
|
yarn install --network-timeout 300000
|
|
yarn build:ui:admin
|
|
- name: Go Build
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
CGO_ENABLED: 0
|
|
run: |
|
|
mkdir -p dist out
|
|
unset GOPATH;
|
|
# Build plugins
|
|
./scripts/plugins.sh
|
|
go build -v -tags "ui" -ldflags "${{ env.LD_FLAGS }}" -o dist/ ./cmd/boundary
|
|
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: Linux Packaging
|
|
uses: hashicorp/actions-packaging-linux@v1
|
|
with:
|
|
name: ${{ github.event.repository.name }}
|
|
description: "HashiCorp Boundary - Identity-based access management for dynamic infrastructure"
|
|
arch: ${{ matrix.goarch }}
|
|
version: ${{ needs.get-product-version.outputs.product-version }}
|
|
maintainer: "HashiCorp"
|
|
homepage: "https://github.com/hashicorp/boundary"
|
|
license: "MPL-2.0"
|
|
binary: "dist/${{ env.PKG_NAME }}"
|
|
deb_depends: "openssl"
|
|
rpm_depends: "openssl"
|
|
config_dir: ".release/linux/package/"
|
|
preinstall: ".release/linux/preinst"
|
|
postremove: ".release/linux/postrm"
|
|
- name: Add Linux Package names to env
|
|
run: |
|
|
echo "RPM_PACKAGE=$(basename out/*.rpm)" >> $GITHUB_ENV
|
|
echo "DEB_PACKAGE=$(basename out/*.deb)" >> $GITHUB_ENV
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ env.RPM_PACKAGE }}
|
|
path: out/${{ env.RPM_PACKAGE }}
|
|
- uses: actions/upload-artifact@v2
|
|
with:
|
|
name: ${{ env.DEB_PACKAGE }}
|
|
path: out/${{ env.DEB_PACKAGE }}
|
|
|
|
|
|
build-darwin:
|
|
needs:
|
|
- get-product-version
|
|
- set-ld-flags
|
|
runs-on: macos-latest
|
|
strategy:
|
|
matrix:
|
|
goos: [ darwin ]
|
|
goarch: [ "amd64", "arm64" ]
|
|
go: [ "1.17.5" ]
|
|
fail-fast: true
|
|
name: Go ${{ matrix.go }} ${{ matrix.goos }} ${{ matrix.goarch }} build
|
|
|
|
env:
|
|
GOPRIVATE: "github.com/hashicorp"
|
|
GO111MODULE: on
|
|
LD_FLAGS: ${{ needs.set-ld-flags.outputs.ldflags }}
|
|
|
|
steps:
|
|
- uses: actions/checkout@v2
|
|
- name: Setup go
|
|
uses: actions/setup-go@v2
|
|
with:
|
|
go-version: ${{ matrix.go }}
|
|
- name: Set sha
|
|
id: set-sha
|
|
run: echo "::set-output name=sha::$(head -n1 internal/ui/VERSION | cut -d ' ' -f1)"
|
|
- uses: actions/checkout@v2
|
|
with:
|
|
repository: "hashicorp/boundary-ui"
|
|
ref: ${{ steps.set-sha.outputs.sha }}
|
|
path: "internal/ui/.tmp/boundary-ui"
|
|
- name: Setup node and yarn
|
|
uses: actions/setup-node@v2
|
|
with:
|
|
node-version: '14'
|
|
cache: 'yarn'
|
|
cache-dependency-path: 'internal/ui/.tmp/boundary-ui/yarn.lock'
|
|
- name: Install Yarn
|
|
run: |
|
|
npm install -g yarn
|
|
- name: UI Build
|
|
working-directory: internal/ui/.tmp/boundary-ui
|
|
run: |
|
|
yarn install --network-timeout 300000
|
|
yarn build:ui:admin
|
|
- name: Go Build
|
|
env:
|
|
GOOS: ${{ matrix.goos }}
|
|
GOARCH: ${{ matrix.goarch }}
|
|
CGO_ENABLED: 0
|
|
run: |
|
|
mkdir -p dist out
|
|
unset GOPATH;
|
|
# Build plugins
|
|
./scripts/plugins.sh
|
|
go build -v -tags "ui netcgo" -ldflags "${{ env.LD_FLAGS }}" -o dist/ ./cmd/boundary
|
|
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-linux
|
|
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: Replace + in version
|
|
run: |
|
|
echo "dockerversion=$(echo ${{ needs.get-product-version.outputs.product-version }} | sed 's/+ent/-ent/g')" >> $GITHUB_ENV
|
|
- name: Docker Build (Action)
|
|
uses: hashicorp/actions-docker-build@v1
|
|
with:
|
|
version: ${{ env.dockerversion }}
|
|
target: default
|
|
arch: ${{ matrix.arch }}
|
|
zip_artifact_name: ${{ env.PKG_NAME }}_${{ needs.get-product-version.outputs.product-version }}_linux_${{ matrix.arch }}.zip
|
|
tags: |
|
|
docker.io/hashicorp/${{ env.repo }}:${{ env.dockerversion }}
|
|
public.ecr.aws/hashicorp/${{ env.repo }}:${{ env.dockerversion }}
|