Other parts of CI do not fail on cache miss, and it might be necessary to allow it to fail to successfully restore it later.
181 lines
6.5 KiB
YAML
181 lines
6.5 KiB
YAML
name: test
|
|
|
|
on:
|
|
push:
|
|
paths-ignore:
|
|
- 'website/**'
|
|
workflow_call:
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
env:
|
|
DOCKER_MIRROR: docker.mirror.hashicorp.services
|
|
|
|
jobs:
|
|
setup:
|
|
outputs:
|
|
go-version: ${{ steps.get-go-version.outputs.go-version }}
|
|
cache-go-build: ${{ steps.go-cache-paths.outputs.go-build }}
|
|
cache-go-mod: ${{ steps.go-cache-paths.outputs.go-mod }}
|
|
cache-go-bin: ${{ steps.go-cache-paths.outputs.go-bin }}
|
|
go-cache-key: ${{ steps.go-cache-key.outputs.key }}
|
|
plugin-cache-path: ${{ steps.plugin-cache-paths.outputs.path }}
|
|
plugin-cache-key: ${{ steps.plugin-cache-key.outputs.key }}
|
|
runs-on: ${{ fromJSON(vars.RUNNER) }}
|
|
steps:
|
|
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
with:
|
|
fetch-depth: '0'
|
|
- name: Determine Go version
|
|
id: get-go-version
|
|
# We use .go-version as our source of truth for current Go
|
|
# version, because "goenv" can react to it automatically.
|
|
run: |
|
|
echo "Building with Go $(cat .go-version)"
|
|
echo "go-version=$(cat .go-version)" >> "$GITHUB_OUTPUT"
|
|
- name: Set up Go
|
|
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
|
with:
|
|
go-version: "${{ steps.get-go-version.outputs.go-version }}"
|
|
cache: false
|
|
- name: Determine go cache key
|
|
id: go-cache-key
|
|
run: |
|
|
echo "key=${{ runner.os }}-go-${{ hashFiles('**/go.sum', './Makefile', './tools/tools.go') }}" >> "$GITHUB_OUTPUT"
|
|
- name: Determine Go cache paths
|
|
id: go-cache-paths
|
|
run: |
|
|
echo "go-build=$(go env GOCACHE)" >> "$GITHUB_OUTPUT"
|
|
echo "go-mod=$(go env GOMODCACHE)" >> "$GITHUB_OUTPUT"
|
|
echo "go-bin=$(go env GOPATH)/bin" >> "$GITHUB_OUTPUT"
|
|
- name: Set up Go modules cache
|
|
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
with:
|
|
path: |
|
|
${{ steps.go-cache-paths.outputs.go-build }}
|
|
${{ steps.go-cache-paths.outputs.go-mod }}
|
|
${{ steps.go-cache-paths.outputs.go-bin }}
|
|
key: ${{ steps.go-cache-key.outputs.key }}
|
|
restore-keys: |
|
|
${{ runner.os }}-go
|
|
- name: Install Tools
|
|
run: |
|
|
go mod download
|
|
make tools
|
|
- name: Determine plugin cache key
|
|
id: plugin-cache-key
|
|
run: |
|
|
echo "key=${{ runner.os }}-plugins-${{ hashFiles('plugins/**/*.go', 'plugins/**/go.sum', './Makefile', './scripts/plugins.sh') }}" >> "$GITHUB_OUTPUT"
|
|
- name: Determin plugin cache path
|
|
id: plugin-cache-paths
|
|
run: |
|
|
echo "path=plugins/**/assets/*.gz" >> "$GITHUB_OUTPUT"
|
|
- name: Set up plugin cache
|
|
id: plugin-cache
|
|
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
with:
|
|
path: |
|
|
${{ steps.plugin-cache-paths.outputs.path }}
|
|
key: ${{ steps.plugin-cache-key.outputs.key }}
|
|
restore-keys: |
|
|
${{ runner.os }}-plugin
|
|
- name: Build Plugins
|
|
if: steps.plugin-cache.outputs.cache-hit != 'true'
|
|
run: |
|
|
make build-plugins
|
|
test-modules:
|
|
needs:
|
|
- setup
|
|
runs-on: ${{ fromJSON(vars.RUNNER) }}
|
|
strategy:
|
|
matrix:
|
|
module: ["api", "sdk"]
|
|
steps:
|
|
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
- name: Set up go
|
|
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
|
with:
|
|
go-version: "${{ needs.setup.outputs.go-version }}"
|
|
cache: false
|
|
- name: Set up Go modules cache
|
|
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
with:
|
|
path: |
|
|
${{ needs.setup.outputs.cache-go-build }}
|
|
${{ needs.setup.outputs.cache-go-mod }}
|
|
${{ needs.setup.outputs.cache-go-bin }}
|
|
key: ${{ needs.setup.outputs.go-cache-key }}
|
|
restore-keys: |
|
|
${{ runner.os }}-go
|
|
fail-on-cache-miss: false
|
|
- name: Test ${{ matrix.module }} Module
|
|
run: |
|
|
make test-${{ matrix.module }}
|
|
|
|
test:
|
|
needs:
|
|
- setup
|
|
runs-on: ${{ fromJSON(vars.RUNNER_LARGE) }}
|
|
steps:
|
|
- name: ulimit
|
|
run: |
|
|
echo "Soft limits"
|
|
ulimit -Sa
|
|
echo "Hard limits"
|
|
ulimit -Ha
|
|
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
|
|
- name: Set up go
|
|
uses: actions/setup-go@0a12ed9d6a96ab950c8f026ed9f722fe0da7ef32 # v5.0.2
|
|
with:
|
|
go-version: "${{ needs.setup.outputs.go-version }}"
|
|
cache: false
|
|
- name: Set up Go modules cache
|
|
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
with:
|
|
path: |
|
|
${{ needs.setup.outputs.cache-go-build }}
|
|
${{ needs.setup.outputs.cache-go-mod }}
|
|
${{ needs.setup.outputs.cache-go-bin }}
|
|
key: ${{ needs.setup.outputs.go-cache-key }}
|
|
restore-keys: |
|
|
${{ runner.os }}-go
|
|
fail-on-cache-miss: false
|
|
- name: Set up plugin cache
|
|
id: plugin-cache
|
|
uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2
|
|
with:
|
|
path: |
|
|
${{ needs.setup.outputs.plugin-cache-path }}
|
|
key: ${{ needs.setup.outputs.plugin-cache-key }}
|
|
restore-keys: |
|
|
${{ runner.os }}-plugin
|
|
- name: GH fix for localhost resolution
|
|
if: github.repository == 'hashicorp/boundary'
|
|
run: |
|
|
cat /etc/hosts && echo "-----------"
|
|
sudo sed -i 's/::1 *localhost ip6-localhost ip6-loopback/::1 ip6 -localhost ip6-loopback/g' /etc/hosts
|
|
cat /etc/hosts
|
|
- name: Initialize Test Database
|
|
run: |
|
|
which pg_isready || sudo apt-get update && sudo apt-get install -y postgresql-client
|
|
make DOCKER_ARGS='-d' PG_OPTS='-c shared_buffers=256MB -c max_connections=200000' -C testing/dbtest/docker database-up
|
|
until pg_isready -h 127.0.0.1; do docker container inspect boundary-sql-tests &> /dev/null || exit 255; sleep 1; done
|
|
|
|
- name: Test
|
|
uses: nick-fields/retry@7152eba30c6575329ac0576536151aca5a72780e # v3.0.0
|
|
env:
|
|
TEST_PACKAGE: "./..."
|
|
TESTARGS: -v
|
|
TEST_TIMEOUT: 40m
|
|
with:
|
|
max_attempts: 1
|
|
timeout_minutes: 120
|
|
retry_on: error
|
|
command: make test
|
|
- name: Cleanup
|
|
if: always()
|
|
run: |
|
|
make -C testing/dbtest/docker clean
|