Skip to content

Commit

Permalink
feat: add enterprise wrapper and image + ci (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
deansheather authored Aug 10, 2023
1 parent 68a42f8 commit be3c50a
Show file tree
Hide file tree
Showing 32 changed files with 3,558 additions and 396 deletions.
94 changes: 94 additions & 0 deletions .github/workflows/enterprise-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
name: enterprise-release
on:
push:
tags:
- "v*"
workflow_dispatch:
inputs:
snapshot:
description: Force a dev version to be generated, implies dry_run.
type: boolean
required: true
dry_run:
description: Perform a dry-run release.
type: boolean
required: true

permissions:
# Required to publish a release
contents: write
# Necessary to push docker images to ghcr.io.
packages: write

env:
CODER_RELEASE: ${{ github.event.inputs.snapshot && 'false' || 'true' }}

jobs:
release:
runs-on: ubuntu-latest
env:
# Necessary for Docker manifest
DOCKER_CLI_EXPERIMENTAL: "enabled"
steps:
- uses: actions/checkout@v3

- name: Docker Login
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- uses: actions/setup-go@v3
with:
go-version: "^1.20.7"

- name: Build binaries
run: |
set -euxo pipefail
go mod download
version=$(./scripts/version.sh)
make -j \
enterprise/build/exectrace_"$version"_linux_{amd64,arm64,armv7}
- name: Build Docker images
run: |
set -euxo pipefail
version=$(./scripts/version.sh)
make -j \
enterprise/build/exectrace_"$version"_linux_{amd64,arm64,armv7}.tag
- name: Push Docker images
if: ${{ !github.event.inputs.snapshot && !github.event.inputs.dry_run }}
run: |
set -euxo pipefail
make -j \
enterprise/build/exectrace_"$version"_linux_{amd64,arm64,armv7}.tag.pushed
# Tag as latest and push
for arch in amd64 arm64 armv7; do
versioned_tag=$(cat enterprise/build/exectrace_"$version"_linux_"$arch".tag)
latest_tag=$(./enterprise/scripts/image_tag.sh --arch "$arch" --version latest)
docker tag "$versioned_tag" "$latest_tag"
docker push "$latest_tag"
done
- name: Build and push multi-arch Docker image
if: ${{ !github.event.inputs.snapshot && !github.event.inputs.dry_run }}
run: |
set -euxo pipefail
version=$(./scripts/version.sh)
make -j \
enterprise/build/exectrace_"$version"_linux.tag.pushed
# Tag as latest and push
versioned_tag=$(cat enterprise/build/exectrace_"$version"_linux.tag)
latest_tag=$(./enterprise/scripts/image_tag.sh --version latest)
docker tag "$versioned_tag" "$latest_tag"
docker push "$latest_tag"
115 changes: 115 additions & 0 deletions .github/workflows/enterprise.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
# This workflow file is adapted from coder/coder.
name: enterprise

on:
push:
branches:
- main

pull_request:

workflow_dispatch:

permissions:
actions: none
checks: none
contents: read
deployments: none
issues: none
packages: none
pull-requests: none
repository-projects: none
security-events: none
statuses: none

# Cancel in-progress runs for pull requests when developers push additional
# changes
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
test-go:
name: "test/go"
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v3
- uses: actions/setup-go@v3
with:
go-version: "^1.20.7"

- name: Echo Go Cache Paths
id: go-cache-paths
run: |
echo "::set-output name=go-build::$(go env GOCACHE)"
echo "::set-output name=go-mod::$(go env GOMODCACHE)"
- name: Go Build Cache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-build }}
key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.**', '**.go') }}

- name: Go Mod Cache
uses: actions/cache@v3
with:
path: ${{ steps.go-cache-paths.outputs.go-mod }}
key: ${{ runner.os }}-go-mod-${{ hashFiles('**/go.sum') }}

- name: Install gotestsum
uses: jaxxstorm/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
repo: gotestyourself/gotestsum
tag: v1.10.1

- name: Test
shell: bash
run: |
set +e
gotestsum \
--junitfile="gotests.xml" \
--jsonfile="gotestsum.json" \
--packages="./..." \
--debug \
-- \
-exec sudo \
-parallel=8 \
-timeout=5m \
-short \
-failfast \
-covermode=atomic \
-coverprofile="gotests.coverage" \
-coverpkg=./...
ret=$?
set -e
if ((ret)); then
# Eternalize test timeout logs because "re-run failed" erases
# artifacts and gotestsum doesn't always capture it:
# https://github.com/gotestyourself/gotestsum/issues/292
# Multiple test packages could've failed, each one may or may
# not run into the edge case. PS. Don't summon ShellCheck here.
for testWithStack in $(grep 'panic: test timed out' gotestsum.json | grep -E -o '("Test":[^,}]*)'); do
if [ -n "$testWithStack" ] && grep -q "${testWithStack}.*PASS" gotestsum.json; then
echo "Conditions met for gotestsum stack trace missing bug, outputting panic trace:"
grep -A 999999 "${testWithStack}.*panic: test timed out" gotestsum.json
fi
done
fi
exit $ret
- uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: gotestsum-debug.json
path: ./gotestsum.json
retention-days: 7

- uses: actions/upload-artifact@v3
if: success() || failure()
with:
name: gotests.xml
path: ./gotests.xml
retention-days: 30
8 changes: 4 additions & 4 deletions .github/workflows/quality.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ jobs:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: "^1.16.12"
go-version: "^1.20.7"

- name: Run make fmt/go
run: make fmt/go
Expand All @@ -54,7 +54,7 @@ jobs:
- name: Install Node.js
uses: actions/setup-node@v2
with:
node-version: "14"
node-version: "18"

- name: Install prettier
run: npm install --global prettier
Expand All @@ -75,12 +75,12 @@ jobs:
- name: Install Go
uses: actions/setup-go@v2
with:
go-version: "^1.16.12"
go-version: "^1.20.7"

- name: Install golangci-lint
run: |
curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh \
| sh -s -- -b $(go env GOPATH)/bin v1.43.0
| sh -s -- -b $(go env GOPATH)/bin v1.53.2
# Linting needs to be done on each build variation of GOOS.
- name: Run make lint/go/linux
Expand Down
8 changes: 8 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,11 @@

# Make outputs
.clang-image

build

*.tfstate
*.tfstate.backup
*.tfplan
*.lock.hcl
.terraform/
Loading

0 comments on commit be3c50a

Please sign in to comment.