Files
probo/.github/workflows/make.yaml
Bryan Frimin 807213d384 Stop tracking generated files
Run make generate in CI lint and test jobs since generated files are
now gitignored. Also include Relay codegen for frontend apps in the
generate target.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
2026-03-16 16:19:47 +01:00

283 lines
9.1 KiB
YAML

name: "make"
on:
push:
branches:
- "main"
pull_request:
branches:
- "main"
jobs:
release-snapshot:
name: "release-snapshot"
runs-on: "ubuntu-24.04-64cores"
permissions:
contents: "read"
packages: "write"
id-token: "write"
security-events: "write"
steps:
- uses: "actions/checkout@v6"
with:
fetch-depth: 0
submodules: recursive
- uses: "actions/setup-go@v6"
with:
go-version: "1.26.1"
cache: true
- run: "go mod download"
- uses: "actions/setup-node@v6"
with:
node-version-file: ".nvmrc"
cache: "npm"
- run: "npm i -g npm@11.8.0"
- run: "npm ci"
- uses: "docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130" # v3.7.0
- uses: "docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f" # v3.12.0
- uses: "sigstore/cosign-installer@053f9b74638557590800a301da1ba82351507e2c" # v3.8.1
- name: Cache Trivy database
uses: "actions/cache@v5"
with:
path: ~/.cache/trivy
key: trivy-db-${{ runner.os }}-${{ github.run_id }}
restore-keys: |
trivy-db-${{ runner.os }}-
- uses: "anchore/sbom-action/download-syft@deef08a0db64bfad603422135db61477b16cef56" # v0.22.1
- uses: "goreleaser/goreleaser-action@e435ccd777264be153ace6237001ef4d979d3a7a" # v6.4.0
with:
distribution: "goreleaser"
version: "~> v2"
args: "release --clean --snapshot"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image with Trivy
if: github.ref == 'refs/heads/main'
uses: "aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8" # 0.33.1
with:
image-ref: "ghcr.io/getprobo/probo:latest-amd64"
format: "sarif"
output: "trivy-results.sarif"
exit-code: 0
ignore-unfixed: true
vuln-type: "os,library"
severity: "CRITICAL,HIGH"
cache-dir: ~/.cache/trivy
- name: Scan Docker image with Trivy
if: github.ref != 'refs/heads/main'
uses: "aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8" # 0.33.1
with:
image-ref: "ghcr.io/getprobo/probo:latest-amd64"
format: "table"
exit-code: 1
ignore-unfixed: true
vuln-type: "os,library"
severity: "CRITICAL,HIGH"
cache-dir: ~/.cache/trivy
- name: Upload Trivy scan results to GitHub Security tab
if: github.ref == 'refs/heads/main'
uses: github/codeql-action/upload-sarif@6bc82e05fd0ea64601dd4b465378bbcf57de0314 # v4.32.1
with:
sarif_file: "trivy-results.sarif"
- uses: anchore/sbom-action@deef08a0db64bfad603422135db61477b16cef56 #v0.22.1
with:
path: ./
format: cyclonedx-json
output-file: sbom.json
- uses: anchore/scan-action@8d2fce09422cd6037e577f4130e9b925e9a37175 #v7.3.1
with:
sbom: "sbom.json"
fail-build: true
severity-cutoff: critical
output-format: table
build:
name: "build"
runs-on: "ubuntu-22.04"
permissions:
contents: "read"
steps:
- uses: "actions/checkout@v6"
with:
submodules: recursive
- uses: "actions/setup-go@v6"
with:
go-version: "1.26.1"
cache: true
- run: "go mod download"
- uses: "actions/setup-node@v6"
with:
node-version-file: ".nvmrc"
cache: "npm"
- run: "npm i -g npm@11.8.0"
- run: "npm ci"
- run: "make build"
- uses: "actions/upload-artifact@v6"
with:
name: "build-artifacts"
path: |
bin/probod
apps/console/dist/
apps/trust/dist/
packages/emails/dist/
retention-days: 1
lint:
name: "lint"
needs: [build]
runs-on: "ubuntu-22.04"
permissions:
contents: "read"
pull-requests: "write"
checks: "write"
steps:
- uses: "actions/checkout@v6"
with:
submodules: recursive
- uses: "actions/setup-go@v6"
with:
go-version: "1.26.1"
cache: true
- run: "go mod download"
- uses: "actions/setup-node@v6"
with:
node-version-file: ".nvmrc"
cache: "npm"
- uses: golangci/golangci-lint-action@1e7e51e771db61008b38414a730f564565cf7c20 # v9.2.0
with:
install-only: true
- uses: reviewdog/action-setup@d8a7baabd7f3e8544ee4dbde3ee41d0011c3a93f # v1.5.0
- run: "npm i -g npm@11.8.0"
- run: "npm ci"
- uses: "actions/download-artifact@v6"
with:
name: "build-artifacts"
- run: "chmod +x bin/probod"
- run: "make generate"
- name: "Run go vet"
run: "go vet ./..."
- name: "Run golangci-lint"
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
golangci-lint run --out-format=line-number ./... 2>&1 | \
reviewdog -f=golangci-lint -reporter=github-pr-review -filter-mode=nofilter -fail-level=error -name="golangci-lint"
else
golangci-lint run ./...
fi
- name: "Run eslint"
env:
REVIEWDOG_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
for dir in apps/console apps/trust packages/ui packages/eslint-config packages/n8n-node; do
(cd "$dir" && npx eslint . --concurrency 4 --format stylish 2>/dev/null) | \
reviewdog -f=eslint -reporter=github-pr-review -filter-mode=nofilter -fail-level=error -name="eslint ($dir)"
done
else
npm run lint
fi
test:
name: "test"
needs: [build]
runs-on: "ubuntu-22.04"
permissions:
contents: "read"
steps:
- uses: "actions/checkout@v6"
with:
submodules: recursive
- uses: "actions/setup-go@v6"
with:
go-version: "1.26.1"
cache: true
- run: "go mod download"
- uses: "actions/download-artifact@v6"
with:
name: "build-artifacts"
- run: "chmod +x bin/probod"
- run: "make generate"
- run: "make test"
env:
GOTESTSUM_JUNITFILE: "junit.xml"
- name: "Upload test results"
uses: "actions/upload-artifact@v6"
if: "always()"
with:
name: "junit-results"
path: "junit.xml"
retention-days: 30
- run: "make coverage-report"
- uses: "actions/upload-artifact@v6"
with:
name: "coverage-reports"
path: |
coverage.out
coverage.html
retention-days: 30
# Trivy ignore does not work for license scanning in Github action
# - uses: "aquasecurity/trivy-action@0.33.1"
# with:
# scan-type: "fs"
# scanners: "license"
# severity: "UNKNOWN,HIGH,CRITICAL"
# exit-code: 1
# trivyignores: ".trivyignore.yaml"
# trivy-config: "trivy.yaml"
test-e2e:
name: "test-e2e"
runs-on: "ubuntu-22.04"
permissions:
contents: "read"
steps:
- uses: "actions/checkout@v6"
with:
submodules: recursive
- uses: "actions/setup-go@v6"
with:
go-version: "1.26.1"
cache: true
- run: "go mod download"
- uses: "actions/setup-node@v6"
with:
node-version-file: ".nvmrc"
cache: "npm"
- run: "npm i -g npm@11.8.0"
- run: "sudo apt-get install -y mkcert"
- run: "sudo mkcert -install 2>&1 | grep -v 'no Firefox and/or Chrome/Chromium security databases found' || true"
- uses: "docker/setup-qemu-action@c7c53464625b32c7a7e944ae62b3e17d2b600130" # v3.7.0
- uses: "docker/setup-buildx-action@8d2750c68a42422c14e847fe6c8ac0403b4cbd6f" # v3.12.0
- uses: "docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746" # v1.2.0
- run: "npm ci"
- run: "make stack-up"
- run: "make stack-ps"
- name: "Inject root CA into e2e config"
run: |
# Use Python to properly inject the root CA PEM content into YAML
python3 << 'EOF'
import yaml
with open('compose/pebble/certs/rootCA.pem', 'r') as f:
root_ca = f.read()
with open('e2e/console/testdata/config.yaml', 'r') as f:
config = yaml.safe_load(f)
config['probod']['custom-domains']['acme']['root-ca'] = root_ca
with open('e2e/console/testdata/config.yaml', 'w') as f:
yaml.dump(config, f, default_flow_style=False, allow_unicode=True)
EOF
- run: "SKIP_APPS=1 make test-e2e"
env:
GOTESTSUM_JUNITFILE: "junit-e2e.xml"
- name: "Upload test results"
uses: "actions/upload-artifact@v6"
if: "always()"
with:
name: "junit-e2e-results"
path: "junit-e2e.xml"
retention-days: 30