Skip to content

Commit

Permalink
ci: switch from jenkins to github actions
Browse files Browse the repository at this point in the history
Jenkins has become troublesome to maintain and makes it harder for users
to see and test output without adding new users.
We could probably spend some time improving that, but the current Jenkins
is also setup on systems managed by the sponsoring company so it makes
sense to move away from that at least.
In order to run the CI tests we need a relatively powerful CI system so
we are making use of the ubuntu-latest-16-cores runners.

The tests seem to run slower than on Jenkins. Part of it may be explained
because the dependencies are not pre-cache and also the pre-requisites
which take time to install.

Signed-off-by: Tiago Castro <tiagolobocastro@gmail.com>
  • Loading branch information
tiagolobocastro committed Dec 30, 2024
1 parent 776f7f0 commit 1b6e88c
Show file tree
Hide file tree
Showing 10 changed files with 231 additions and 22 deletions.
31 changes: 31 additions & 0 deletions .github/workflows/helm-chart.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Helm Chart CI
on:
workflow_call:
pull_request:
types: ['opened', 'edited', 'reopened', 'synchronize']

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
helm-chart-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: DeterminateSystems/nix-installer-action@v14
- uses: DeterminateSystems/magic-nix-cache-action@v8
- name: Pre-populate nix-shell
run: |
export NIX_PATH=nixpkgs=$(jq '.nixpkgs.url' nix/sources.json -r)
echo "NIX_PATH=$NIX_PATH" >> $GITHUB_ENV
nix-shell --run "echo" ./scripts/helm/shell.nix
- name: HelmChart publish test
run: |
nix-shell --pure --run "./scripts/helm/test-publish-chart-yaml.sh" ./scripts/helm/shell.nix
- name: HelmChart Readme
run: nix-shell --run "./scripts/helm/generate-readme.sh" ./scripts/helm/shell.nix
- name: HelmChart Template
run: nix-shell --pure --run "./scripts/helm/test-template.sh" ./scripts/helm/shell.nix
19 changes: 19 additions & 0 deletions .github/workflows/image-pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: ImageBuild CI
on:
workflow_call:

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
image-build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: DeterminateSystems/nix-installer-action@v14
- uses: DeterminateSystems/magic-nix-cache-action@v8
- name: Test building the release images
run: ./scripts/release.sh --skip-publish --build-bins
29 changes: 29 additions & 0 deletions .github/workflows/image.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: Image Push
on:
push:
branches:
- develop
- 'release/**'
tags:
- 'v[0-9]+.[0-9]+.[0-9]+**'

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
image-build-test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: DeterminateSystems/nix-installer-action@v14
- uses: DeterminateSystems/magic-nix-cache-action@v8
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Build and push the release images
run: ./scripts/release.sh
1 change: 1 addition & 0 deletions .github/workflows/k8s-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ name: K8s CI
on:
pull_request:
types: ['opened', 'edited', 'reopened', 'synchronize']
workflow_call:

jobs:
k8s-ci:
Expand Down
34 changes: 34 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Unit/Int CI
on:
workflow_call:

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
linter:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
submodules: 'recursive'
- uses: DeterminateSystems/nix-installer-action@v14
- uses: DeterminateSystems/magic-nix-cache-action@v8
- name: Pre-populate nix-shell
run: |
export NIX_PATH=nixpkgs=$(jq '.nixpkgs.url' nix/sources.json -r)
echo "NIX_PATH=$NIX_PATH" >> $GITHUB_ENV
nix-shell --run "echo" shell.nix
- name: Handle Rust dependencies caching
uses: Swatinem/rust-cache@v2
- name: Lint rust code
run: |
nix-shell --run "./dependencies/control-plane/scripts/rust/generate-openapi-bindings.sh"
nix-shell --run "./scripts/rust/linter.sh"
- name: Lint python code
run: nix-shell --run "black ./tests/bdd"
- name: Lint nix code
run: nix-shell --run "nixpkgs-fmt ."
- name: Check submodules
run: nix-shell --run "./scripts/git/check-submodule-branches.sh"
18 changes: 18 additions & 0 deletions .github/workflows/nightly-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Nightly CI
on:
workflow_dispatch:
push:
branches:
- ci

jobs:
ci:
uses: ./.github/workflows/pr-ci.yml
nightly-ci:
if: ${{ success() }}
needs:
- ci
runs-on: ubuntu-latest
steps:
- name: CI succeeded
run: exit 0
31 changes: 31 additions & 0 deletions .github/workflows/pr-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
name: Bors CI
on:
workflow_call:
push:
branches:
- staging
- trying

jobs:
lint-ci:
uses: ./.github/workflows/lint.yml
helm-ci:
uses: ./.github/workflows/helm-chart.yml
int-ci:
uses: ./.github/workflows/unit-int.yml
image-ci:
uses: ./.github/workflows/image-pr.yml
k8s-ci:
uses: ./.github/workflows/k8s-ci.yml
bors-ci:
if: ${{ success() }}
needs:
- lint-ci
- helm-ci
- int-ci
- image-ci
- k8s-ci
runs-on: ubuntu-latest
steps:
- name: CI succeeded
run: exit 0
22 changes: 0 additions & 22 deletions .github/workflows/template-chart.yml

This file was deleted.

40 changes: 40 additions & 0 deletions .github/workflows/unit-int.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Integration CI
on:
workflow_call:

env:
CARGO_TERM_COLOR: always
CARGO_INCREMENTAL: 0

jobs:
int-tests:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
submodules: 'recursive'
- uses: DeterminateSystems/nix-installer-action@v14
- uses: DeterminateSystems/magic-nix-cache-action@v8
- name: Pre-populate nix-shell
run: |
export NIX_PATH=nixpkgs=$(jq '.nixpkgs.url' nix/sources.json -r)
echo "NIX_PATH=$NIX_PATH" >> $GITHUB_ENV
nix-shell --run "echo" shell.nix
- name: Handle Rust dependencies caching
uses: Swatinem/rust-cache@v2
with:
save-if: ${{ startsWith(github.ref_name, 'release/') || github.ref_name == 'develop' || github.ref_name == 'ci' }}
- name: Build the binaries
run: nix-shell --run "cargo build --bins"
- name: Build the tests
run: nix-shell --run "./scripts/rust/test.sh --no-run"
- name: Run Tests
run: |
# includes both unit and integration tests
nix-shell --run "./scripts/rust/test.sh"
# debugging
# - name: Setup tmate session
# if: ${{ failure() }}
# timeout-minutes: 120
# uses: mxschmitt/action-tmate@v3
28 changes: 28 additions & 0 deletions scripts/rust/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
#!/usr/bin/env bash

SCRIPT_DIR="$(dirname "$0")"

ARGS=""
OPTS=""
DO_ARGS=
while [ "$#" -gt 0 ]; do
case $1 in
--)
DO_ARGS="y"
shift;;
*)
if [ "$DO_ARGS" == "y" ]; then
ARGS="$ARGS $1"
else
OPTS="$OPTS $1"
fi
shift;;
esac
done

set -euxo pipefail

# build test dependencies
cargo build --bins

cargo test ${OPTS} -- ${ARGS} --test-threads=1

0 comments on commit 1b6e88c

Please sign in to comment.