Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: GHA to smoke test against last released exemplar #2983

Merged
merged 30 commits into from
Oct 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
16b1ec5
chore: WIP smoke test upgrade path
safeer Oct 3, 2024
adf7840
retrieve latest tagged release
safeer Oct 3, 2024
612bb22
go test smoketest
safeer Oct 3, 2024
e687129
add placeholder smoketest module
safeer Oct 4, 2024
4c47a82
upload smoke-test-upgrade report artifact
safeer Oct 4, 2024
5d4d7d8
logging and handling to find script error
safeer Oct 4, 2024
b358e5d
run previous exemplar on current HEAD
safeer Oct 4, 2024
ff6d1ec
debug: run smoketests on previous commit
safeer Oct 7, 2024
bd51019
use envar to conditionally run smoke test with kube
safeer Oct 7, 2024
c452484
checkout exemplar from previous commit instead of whole tree
safeer Oct 7, 2024
e56f7ee
replace currente exemplar with latest release's exemplar
safeer Oct 7, 2024
ca65d1f
test against previous release, remove tmp smoke test
safeer Oct 7, 2024
14ff58c
cleanup
safeer Oct 7, 2024
e42c376
more apt GHA name since it doesn't test the user upgrade path
safeer Oct 7, 2024
dd2e7a7
add smoketest workflow which checks out the tagged release and fetche…
safeer Oct 8, 2024
82fdc33
run tagged release cluster with released binaries
safeer Oct 8, 2024
6bee6b4
deploy tagged dockerhub image to kube cluster, run smoke test without…
safeer Oct 9, 2024
9f62860
use deployment Justfile from HEAD
safeer Oct 9, 2024
634b79b
checkout HEAD and run smoke test with kube deploy to test upgrade path
safeer Oct 9, 2024
41ccb05
remove gate on java builds, enable exemplar test
safeer Oct 9, 2024
c097c5d
simple java module to debug test timeout issue
safeer Oct 10, 2024
cf4e664
fix deploy-version version to match helm chart usage
safeer Oct 11, 2024
98e1b8e
fix: istio
stuartwdouglas Oct 14, 2024
f2eed7e
move SKIP_KUBE_FULL_DEPLOY env to harness
safeer Oct 14, 2024
11eb372
ingress now working, FSMNext is broken
safeer Oct 16, 2024
62e7d94
fix tests
safeer Oct 29, 2024
ad37c58
chore(autofmt): Automated formatting
github-actions[bot] Oct 29, 2024
2bb92a5
adjust ingress path
stuartwdouglas Oct 30, 2024
0f8d4fe
update workflow to run smoketest
safeer Oct 30, 2024
dd45516
enable smoketest for pushes to main
safeer Oct 30, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
92 changes: 92 additions & 0 deletions .github/workflows/smoketest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
on:
push:
branches:
- main
name: SmokeTest
concurrency:
group: ${{ github.ref }}-smoketest
cancel-in-progress: true
jobs:
smoke-test-upgrade-path:
name: Smoke Test Upgrade Path
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 the repository with full history
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 0
fetch-tags: true
- name: Get last tagged release
run: |
latest_release=$(git tag --sort=-v:refname | grep -v v1 | head -n 1)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At some point (not now) we are going to need to think about testing older releases. The 'latest release' is often just a few commits ago.

echo "Latest release: $latest_release"
echo "LATEST_VERSION=${latest_release#v}" >> "$GITHUB_ENV"
- name: Check out the last tagged release
uses: actions/checkout@v4
with:
ref: v${{ env.LATEST_VERSION }}
fetch-depth: 1
fetch-tags: true
# The following grabs the current smoke test and deployment Justfile from the HEAD. This
# is to solve the chicken-and-egg. Once it's in the tagged release, skip this.
- name: Check out the current smoke test
uses: actions/checkout@v4
with:
clean: false
repository: TBD54566975/ftl.git
path: tmpsmoketest
ref: ${{ github.head_ref }}
fetch-depth: 0
sparse-checkout: |
smoketest
deployment
sparse-checkout-cone-mode: false
# When we remove the above step to fetch the current smoke tests and deployment Justfile
# into tmpsmoketest, remove the overwrite step as well.
- name: Replace the tagged release smoketest with the current smoketest
run: |
set -euo pipefail
echo "Replacing tagged release smoketest with current smoketest"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This approach will break if the smoke test adds new features that are in the new version but not the old version, as you are testing the new code again old FTL.

This is fine for now but I think but will need some thought going forward.

rm -r ./smoketest && mv ./tmpsmoketest/smoketest ./smoketest
echo "Replacing deployment Justfile with current Justfile"
cp ./tmpsmoketest/deployment/Justfile ./deployment/Justfile
echo "Removing tmpsmoketest"
rm -r ./tmpsmoketest
- name: Init Hermit
uses: cashapp/activate-hermit@v1
with:
cache: true
- name: Build Cache
uses: ./.github/actions/build-cache
- name: Download Go Modules
run: go mod download
- name: Set up a kube cluster with the tagged release dockerhub image
run: |
set -euo pipefail
echo "Deploying the tagged release to the cluster"
cd deployment && just deploy-version ${{ env.LATEST_VERSION }} && cd ..
# We skip this since it requires an integration test change to skip the full kube deploy.
# Re-enable this step when the tagged release has the integration test change.
# - name: Smoke test the tagged release images
# run: |
# set -euo pipefail
# echo "Running smoke test on the tagged release images"
# USE_DB_CONFIG=true SKIP_KUBE_FULL_DEPLOY=true go test -v -tags smoketest -run '^Test' ./smoketest
- name: Check out HEAD of the current branch
uses: actions/checkout@v4
with:
ref: ${{ github.head_ref }}
fetch-depth: 1
- name: Smoke test HEAD with a full deploy to test upgrade path
run: |
set -euo pipefail
echo "Running smoke test on the HEAD images"
USE_DB_CONFIG=true go test -v -timeout 15m -tags smoketest -run '^Test' ./smoketest
- name: Archive Report
uses: actions/upload-artifact@v4
if: always()
with:
name: kube-report-smoke-test-upgrade
path: /tmp/ftl-kube-report/
3 changes: 2 additions & 1 deletion deployment/Justfile
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,9 @@ apply:
kubectl delete job --ignore-not-found=true ftl-dbmig-latest
helm upgrade --install ftl ../charts/ftl -f values.yaml

deploy-version version: setup-cluster
deploy-version version: setup-cluster install-istio
helm repo add ftl https://tbd54566975.github.io/ftl-charts --force-update
helm upgrade --install ftl ftl/ftl --version={{version}} -f values-release.yaml || sleep 5 # wait for CRDs to be created, the initial apply will usually fail
helm upgrade --install ftl ftl/ftl --version={{version}} -f values-release.yaml

delete:
Expand Down
2 changes: 1 addition & 1 deletion internal/integration/actions.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build integration || infrastructure
//go:build integration || infrastructure || smoketest

package integration

Expand Down
2 changes: 1 addition & 1 deletion internal/integration/harness.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
//go:build integration || infrastructure
//go:build integration || infrastructure || smoketest

package integration

Expand Down
14 changes: 14 additions & 0 deletions smoketest/echo/echo.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
// This is the echo module.
package echo

import (
"context"
"fmt"
)

// Echo returns a greeting with the current time.
//
//ftl:verb export
func Echo(ctx context.Context, req string) (string, error) {
return fmt.Sprintf("Hello, %s!!!", req), nil
}
2 changes: 2 additions & 0 deletions smoketest/echo/ftl.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
module = "echo"
language = "go"
18 changes: 18 additions & 0 deletions smoketest/echo/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module ftl/echo

go 1.23.0

replace github.com/TBD54566975/ftl => ../..

require github.com/TBD54566975/ftl v0.0.0-00010101000000-000000000000

require (
github.com/alecthomas/participle/v2 v2.1.1 // indirect
github.com/alecthomas/types v0.16.0 // indirect
github.com/deckarep/golang-set/v2 v2.6.0 // indirect
github.com/hashicorp/cronexpr v1.1.2 // indirect
github.com/swaggest/jsonschema-go v0.3.72 // indirect
github.com/swaggest/refl v1.3.0 // indirect
golang.org/x/exp v0.0.0-20240909161429-701f63a606c0 // indirect
google.golang.org/protobuf v1.35.1 // indirect
)
Loading