feat: dead letter topics #10459
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
pull_request: | |
merge_group: | |
name: CI | |
concurrency: | |
group: ${{ github.ref }}-ci | |
cancel-in-progress: true | |
jobs: | |
test: | |
name: Test Go | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Build Language Plugins | |
run: just build-language-plugins | |
- name: Test | |
run: | | |
go-test-annotate | |
# go-test-annotate ${{ (github.event_name == 'pull_request' && github.event.action != 'enqueued' && !contains( github.event.pull_request.labels.*.name, 'run-all')) && '-short' || '' }} | |
test-readme: | |
name: Test README | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Build Language Plugins | |
run: just build-language-plugins | |
- name: Test README | |
run: just test-readme | |
lint: | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: golangci-lint | |
run: | | |
golangci-lint --version | |
golangci-lint run --new-from-rev="$(git merge-base origin/main HEAD)" --out-format github-actions ./... | |
- name: lint-commit-or-rollback | |
run: lint-commit-or-rollback ./backend/... 2>&1 | to-annotation | |
- name: go-check-sumtype | |
shell: bash | |
run: go-check-sumtype --include-shared-interfaces=true ./backend/... ./cmd/... ./internal/... 2>&1 | to-annotation | |
- name: actionlint | |
shell: bash | |
run: actionlint --oneline | to-annotation | |
# Too annoying to disable individual warnings | |
# - name: staticcheck | |
# run: staticcheck ./... | |
- name: lint-scripts | |
run: just lint-scripts | |
proto-breaking: | |
name: Proto Breaking Change Check | |
if: ${{ github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'skip-proto-breaking') }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Proto Breaking Change Check | |
shell: bash | |
run: | | |
set -o pipefail | |
buf breaking --against 'https://github.com/block/ftl.git#branch=main' | to-annotation || true | |
console: | |
name: Console | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Console pnpm install | |
run: just pnpm-install | |
- name: Console Lint | |
run: just lint-frontend | |
- name: Console Build | |
run: just build-frontend | |
- name: Console Test | |
run: just test-frontend | |
test-wasm: | |
name: Test sqlc-gen-ftl | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Test WASM | |
run: cd sqlc-gen-ftl && cargo test --features ci --test sqlc_gen_ftl_test -- --nocapture | |
- name: Check for uncommitted changes | |
run: | | |
if [[ -n $(git status -s) ]]; then | |
echo "Error: Building sqlc-gen-ftl resulted in uncommitted changes:" | |
git status -s | |
git --no-pager diff | |
exit 1 | |
fi | |
extension: | |
name: VSCode Extension | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: VSCode extension pnpm install | |
run: just pnpm-install | |
- name: VSCode extension lint | |
working-directory: frontend/vscode | |
run: pnpm run lint | |
- name: VSCode extension pnpm build and package | |
run: just package-extension | |
plugin: | |
name: Intellij Plugin | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Install Java | |
run: java -version | |
- name: Build Intellij Plugin | |
run: just build-intellij-plugin | |
build-all: | |
name: Rebuild All | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Rebuild All | |
run: just build-all | |
- name: Check No SCM Changes | |
run: | | |
if [[ -n $(git status -s) ]] | |
then | |
echo "Running the build resulted in changes to git controlled files:" | |
git status -s | |
git --no-pager diff | |
exit 1 | |
fi | |
docs: | |
name: Build Docs | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
submodules: true | |
- uses: cashapp/[email protected] | |
- run: cd docs && zola build | |
arch-lint: | |
name: Lint Architecture | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cashapp/[email protected] | |
- run: go-arch-lint check || true | |
docker-shard: | |
name: Shard Docker Builds | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.set-matrix.outputs.matrix }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- uses: cashapp/[email protected] | |
- id: set-matrix | |
name: Shard Docker Builds | |
uses: ./.github/actions/shard-docker-builds | |
build-docker-images: | |
name: Build ${{ matrix.service }} Docker Image | |
needs: docker-shard | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
service: ${{ fromJson(needs.docker-shard.outputs.matrix) }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- uses: cashapp/[email protected] | |
- name: Build Image and Save | |
uses: ./.github/actions/save-docker-image | |
with: | |
service: ${{ matrix.service }} | |
console-e2e: | |
name: Console e2e | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Restore playwright browser cache | |
id: cache-playwright | |
uses: actions/cache/restore@v4 | |
with: | |
path: ~/.cache/ms-playwright | |
key: ${{ runner.os }}-playwright-${{ hashFiles('**/pnpm-lock.yaml') }} | |
restore-keys: | | |
${{ runner.os }}-playwright- | |
- name: Console pnpm install | |
run: just pnpm-install | |
- name: Build Language Plugins | |
run: just build-language-plugins | |
- name: Console e2e | |
run: just e2e-frontend | |
integration-shard: | |
name: Shard Integration Tests | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.extract-tests.outputs.matrix }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Extract test cases | |
id: extract-tests | |
run: | | |
set -euo pipefail | |
# shellcheck disable=SC2046 | |
echo "matrix={\"test\":$(jq -c -n '$ARGS.positional' --args $(git grep -l '^//go:build integration' | xargs grep '^func Test' | awk '{print $2}' | cut -d'(' -f1 | paste -d '|' - - | sed 's/|*$//'))}" >> "$GITHUB_OUTPUT" | |
integration-run: | |
name: Integration Test | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
needs: integration-shard | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.integration-shard.outputs.matrix)}} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Download Go Modules | |
run: go mod download | |
- name: Build Language Plugins | |
run: just build-language-plugins | |
- name: Run ${{ matrix.test }} | |
run: | | |
set -euo pipefail | |
# shellcheck disable=SC2046 | |
echo '${{ matrix.test }}' | tr '|' ' ' | xargs -n1 just integration-tests | |
infrastructure-shard: | |
name: Shard Infrastructure Tests | |
# if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.extract-tests.outputs.matrix }} | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Extract test cases | |
id: extract-tests | |
run: | | |
set -euo pipefail | |
# shellcheck disable=SC2046 | |
echo "matrix={\"test\":$(jq -c -n '$ARGS.positional' --args $(git grep -l '^//go:build infrastructure' | xargs grep '^func Test' | awk '{print $2}' | cut -d'(' -f1))}" >> "$GITHUB_OUTPUT" | |
infrastructure-run: | |
name: Infrastructure Test | |
#if: github.event_name != 'pull_request' || github.event.action == 'enqueued' || contains( github.event.pull_request.labels.*.name, 'run-all') | |
needs: | |
- infrastructure-shard | |
- build-docker-images | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: ${{fromJson(needs.infrastructure-shard.outputs.matrix)}} | |
steps: | |
- name: Free Disk Space (Ubuntu) | |
uses: jlumbroso/free-disk-space@main | |
with: | |
# this might remove tools that are actually needed, | |
# if set to "true" but frees about 6 GB | |
tool-cache: false | |
large-packages: false # this is slow | |
- name: Checkout code | |
uses: actions/checkout@v4 | |
- name: Init Hermit | |
uses: cashapp/[email protected] | |
- name: Load Docker Images | |
uses: ./.github/actions/load-docker-images | |
- name: Start Cluster | |
run: just k8s setup-istio-cluster | |
- name: Tag and Push Docker Images | |
run: | | |
for image in $(just list-docker-images); do | |
docker tag "ftl0/ftl-${image}:latest" "localhost:5000/ftl-${image}:latest" | |
docker push "localhost:5000/ftl-${image}:latest" | |
done | |
- name: Build Cache | |
uses: ./.github/actions/build-cache | |
- name: Download Go Modules | |
run: go mod download | |
- name: Start FTL | |
run: just k8s apply | |
- name: Build Language Plugins | |
run: just build-language-plugins | |
- name: Run ${{ matrix.test }} | |
run: | | |
set -euo pipefail | |
# shellcheck disable=SC2046 | |
go test -v -race -tags infrastructure -run '^${{ matrix.test }}$' $(git grep -l '^//go:build infrastructure' | xargs grep -l '^func ${{ matrix.test }}' | xargs -I {} dirname ./{}) | |
- name: Archive Report | |
uses: actions/upload-artifact@v4 | |
if: always() # Always upload the report even on failure | |
with: | |
name: kube-report-${{ matrix.test }} | |
path: /tmp/ftl-kube-report/ | |
- name: Teardown Cluster | |
working-directory: deployment | |
if: always() # Always cleanup the cluster even on failure | |
run: just teardown-cluster | |
- name: Delete Images | |
if: always() # We don't want to cache these images, delete them before the cache action | |
run: just k8s delete-all-images | |
integration-success: | |
name: Integration Success | |
needs: [integration-run] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- name: Check integration tests result | |
run: | | |
if [[ "${{ needs.integration-run.result }}" == "failure" ]]; then | |
echo "Integration tests failed" | |
exit 1 | |
else | |
echo "Integration tests passed" | |
fi | |
docker-success: | |
name: Docker Success | |
needs: [build-docker-images] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- name: Check docker builds result | |
run: | | |
if [[ "${{ needs.build-docker-images.result }}" == "failure" ]]; then | |
echo "Docker builds failed" | |
exit 1 | |
else | |
echo "Docker builds passed" | |
fi | |
infrastructure-success: | |
name: Infrastructure Success | |
needs: [infrastructure-run] | |
runs-on: ubuntu-latest | |
if: ${{ always() }} | |
steps: | |
- name: Check infrastructure tests result | |
run: | | |
if [[ "${{ needs.infrastructure-run.result }}" == "failure" ]]; then | |
echo "Infrastructure tests failed" | |
exit 1 | |
else | |
echo "Infrastructure tests passed" | |
fi |