Skip to content

Commit

Permalink
setup continuous integration
Browse files Browse the repository at this point in the history
Continuous integration runs in two simultaneous jobs. One for make ci,
which runs cargo build, test, fmt and clippy. The other, make image,
builds the updater container image.

Caching for make ci speeds up the build time from over 10 minutes to
just a minute or two. cargo install cargo-deny took five minutes on its
own before caching CARGO_HOME.

Caching for the make image build required some hacks and ended up being
slower that running with no caching (due to all the compressing and
decompressing of docker image layers, CPU-bound), so no caching there.
  • Loading branch information
webern committed Jan 21, 2021
1 parent aecd588 commit f861bb4
Show file tree
Hide file tree
Showing 2 changed files with 76 additions and 1 deletion.
55 changes: 55 additions & 0 deletions .github/workflows/updater-ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
name: Updater CI
on:
pull_request:
branches: [*]
push:
branches: [develop]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2

- name: Cargo Home Cache
uses: actions/cache@v2
env:
cache-name: cargo-home
with:
path: /usr/share/rust/.cargo
key: ${{ runner.os }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo') }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo-deny') }}-${{ hashFiles('Makefile') }}-${{ hashFiles('updater/Cargo.lock') }}-${{ hashFiles('integ/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo') }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo-deny') }}-${{ hashFiles('Makefile') }}-${{ hashFiles('updater/Cargo.lock') }}-
${{ runner.os }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo') }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo-deny') }}-${{ hashFiles('Makefile') }}-
${{ runner.os }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo') }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo-deny') }}-
${{ runner.os }}-${{ hashFiles('/usr/share/rust/.cargo/bin/cargo') }}-
- name: Updater Build Cache
uses: actions/cache@v2
env:
cache-name: updater-target
with:
path: updater/target
key: ${{ runner.os }}-${{ hashFiles('updater/Cargo.toml') }}-${{ hashFiles('updater/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ hashFiles('updater/Cargo.toml') }}-
${{ runner.os }}-
- name: Integ Build Cache
uses: actions/cache@v2
env:
cache-name: integ-target
with:
path: integ/target
key: ${{ runner.os }}-${{ hashFiles('integ/Cargo.toml') }}-${{ hashFiles('integ/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-${{ hashFiles('integ/Cargo.toml') }}-
${{ runner.os }}-
- run: rustup update stable && cargo install cargo-deny
- run: make ci

image:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: make image
22 changes: 21 additions & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ image: fetch-sdk

.PHONY: fetch-sdk
fetch-sdk: # fetches and loads the we use to build the updater docker image
set -eou pipefail; \
set -eou; \
if ! docker image inspect ${BUILDER_IMAGE} >/dev/null 2>&1; then \
if ! curl --fail --show-error https://${BOTTLEROCKET_SDK_SITE}/${BUILDER_IMAGE}.tar.gz \
| gunzip | docker load; then \
Expand All @@ -35,3 +35,23 @@ fetch-sdk: # fetches and loads the we use to build the updater docker image
check-licenses:
cd updater && cargo deny check licenses
cd integ && cargo deny check licenses

.PHONY: unit-tests
unit-tests:
cd updater && cargo test --locked
cd integ && cargo test --locked

.PHONY: build
build:
cd updater && cargo build --locked
cd integ && cargo build --locked

.PHONY: lint
lint:
cd updater && cargo fmt -- --check
cd updater && cargo clippy --locked -- -D warnings
cd integ && cargo fmt -- --check
cd integ && cargo clippy --locked -- -D warnings

.PHONY: ci # these are all of the checks (except for image) that we run for ci
ci: check-licenses lint build unit-tests

0 comments on commit f861bb4

Please sign in to comment.