Skip to content

Commit

Permalink
feat: simplify makefiles and CI
Browse files Browse the repository at this point in the history
this commit largely removes the redundency of writing each command once for each shim
this repo supports. It uses foreach syntax to iterate over each item in the shims
variable and execute a command for each one.

This also applies to the CI. This commit adds a new docker-build-push action that
builds and pushes the images to ghcr, abstrating the repeated build and push steps
into this reusable workflow.

It also adds spin-inbound-redis and spin-outbound-redis images to the release pipeline

Signed-off-by: jiaxiao zhou <[email protected]>
  • Loading branch information
Mossaka committed Jul 25, 2023
1 parent 1cb6aaa commit ea67517
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 150 deletions.
12 changes: 5 additions & 7 deletions .github/workflows/build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
"containerd-shim-slight-v1 -> target"
"containerd-shim-spin-v1 -> target"
"containerd-shim-wws-v1 -> target"
"containerd-shim-*-v1 -> target"
- name: "Install Rust Wasm targets"
run: |
make install-rust-targets
Expand All @@ -36,7 +34,7 @@ jobs:
sudo apt-get install protobuf-compiler -y
- name: build
run: |
make build
VERBOSE=1 make build
- name: lowercase the runner OS name
shell: bash
run: |
Expand All @@ -45,9 +43,9 @@ jobs:
- name: package release assets
run: |
mkdir _dist
cp containerd-shim-slight-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/
cp containerd-shim-spin-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/
cp containerd-shim-wws-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/
for shim in slight spin wws; do
cp containerd-shim-$shim-v1/target/${{ matrix.config.arch }}-unknown-linux-musl/release/containerd-shim-*-v1 _dist/
done
cd _dist
tar czf containerd-wasm-shims-v1-${{ env.RUNNER_OS }}-${{ matrix.config.arch }}.tar.gz containerd-shim-*-v1
- name: upload shim artifacts
Expand Down
8 changes: 2 additions & 6 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
"containerd-shim-slight-v1 -> target"
"containerd-shim-spin-v1 -> target"
"containerd-shim-wws-v1 -> target"
"containerd-shim-*-v1 -> target"
- name: "Install Rust Wasm targets"
run: |
make install-rust-targets
Expand All @@ -36,9 +34,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: |
"containerd-shim-slight-v1 -> target"
"containerd-shim-spin-v1 -> target"
"containerd-shim-wws-v1 -> target"
"containerd-shim-*-v1 -> target"
- name: "Install Rust Wasm targets"
run: |
make install-rust-targets
Expand Down
29 changes: 29 additions & 0 deletions .github/workflows/docker-build-push.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
name: 'Build and push Docker images'
on:
workflow_call:
inputs:
images:
required: true
type: string
platforms:
required: true
type: string
secrets:
GITHUB_TOKEN:
required: true
jobs:
build_and_push:
runs-on: ubuntu-latest
strategy:
matrix:
image: ${{fromJson(github.event.inputs.images)}}
steps:
- name: build and push
uses: docker/build-push-action@v3
with:
push: true
tags: |
ghcr.io/deislabs/containerd-wasm-shims/${{ matrix.image.imageName }}:${{ env.RELEASE_VERSION }}
ghcr.io/deislabs/containerd-wasm-shims/${{ matrix.image.imageName }}:latest
context: ${{ matrix.image.context }}
platforms: ${{ github.event.inputs.platforms }}
43 changes: 9 additions & 34 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -53,41 +53,16 @@ jobs:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: build and push Spin hello world
uses: docker/build-push-action@v3
with:
push: true
tags: |
ghcr.io/deislabs/containerd-wasm-shims/examples/spin-rust-hello:${{ env.RELEASE_VERSION }}
ghcr.io/deislabs/containerd-wasm-shims/examples/spin-rust-hello:latest
context: images/spin
platforms: wasi/wasm
- name: build and push Spin DotNet
uses: docker/build-push-action@v3
with:
push: true
tags: |
ghcr.io/deislabs/containerd-wasm-shims/examples/spin-dotnet-hello:${{ env.RELEASE_VERSION }}
ghcr.io/deislabs/containerd-wasm-shims/examples/spin-dotnet-hello:latest
context: images/spin_dotnet
platforms: wasi/wasm
- name: build and push Slight hello world
uses: docker/build-push-action@v3
- name: Build and push images
uses: ./.github/workflows/build_and_push.yaml
with:
push: true
tags: |
ghcr.io/deislabs/containerd-wasm-shims/examples/slight-rust-hello:${{ env.RELEASE_VERSION }}
ghcr.io/deislabs/containerd-wasm-shims/examples/slight-rust-hello:latest
context: images/slight
platforms: wasi/wasm
- name: build and push Wasm Workers Server (wws) hello world (JS)
uses: docker/build-push-action@v3
with:
push: true
tags: |
ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:${{ env.RELEASE_VERSION }}
ghcr.io/deislabs/containerd-wasm-shims/examples/wws-js-hello:latest
context: images/wws
images: |
[{"imageName": "examples/spin-rust-hello", "context": "images/spin"},
{"imageName": "examples/spin-dotnet-hello", "context": "images/spin_dotnet"},
{"imageName": "examples/slight-rust-hello", "context": "images/slight"},
{"imageName": "examples/wws-js-hello", "context": "images/wws"},
{"imageName": "examples/spin-inbound-redis", "context": "images/spin-inbound-redis"},
{"imageName": "examples/spin-outbound-redis", "context": "images/spin-outbound-redis"}]
platforms: wasi/wasm
- name: untar x86_64 musl artifacts into ./deployments/k3d/.tmp dir
run: |
Expand Down
115 changes: 36 additions & 79 deletions Makefile
Original file line number Diff line number Diff line change
@@ -1,21 +1,27 @@
SHIMS := slight spin wws
BUILD_TARGETS = $(foreach shim,$(SHIMS),build-$(shim)-cross-$(TARGET))

PREFIX ?= /usr/local
INSTALL ?= install
TEST_IMG_NAME_SPIN ?= wasmtest_spin:latest
TEST_IMG_NAME_SLIGHT ?= wasmtest_slight:latest
TEST_IMG_NAME_WWS ?= wasmtest_wws:latest
TEST_IMG_NAME_spin ?= wasmtest_spin:latest
TEST_IMG_NAME_slight ?= wasmtest_slight:latest
TEST_IMG_NAME_wws ?= wasmtest_wws:latest
ARCH ?= x86_64
TARGET ?= $(ARCH)-unknown-linux-musl
PYTHON ?= python3
CONTAINERD_NAMESPACE ?= default
ifeq ($(VERBOSE),)
VERBOSE_FLAG :=
else
VERBOSE_FLAG := -vvv
endif

.PHONY: test
test: unit-tests integration-tests

.PHONY: unit-tests
unit-tests: build
cross test --release --manifest-path=containerd-shim-slight-v1/Cargo.toml --target $(TARGET)
cross test --release --manifest-path=containerd-shim-spin-v1/Cargo.toml --target $(TARGET)
cross test --release --manifest-path=containerd-shim-wws-v1/Cargo.toml --target $(TARGET)
$(foreach shim,$(SHIMS),cross test --release --manifest-path=containerd-shim-$(shim)-v1/Cargo.toml --target $(TARGET);)

.PHONY: integration-tests
integration-tests: build
Expand All @@ -25,15 +31,11 @@ integration-tests: build

.PHONY: fmt
fmt:
cargo fmt --all --manifest-path=containerd-shim-slight-v1/Cargo.toml -- --check
cargo fmt --all --manifest-path=containerd-shim-spin-v1/Cargo.toml -- --check
cargo fmt --all --manifest-path=containerd-shim-wws-v1/Cargo.toml -- --check
cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-slight-v1/Cargo.toml -- -D warnings
cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-spin-v1/Cargo.toml -- -D warnings
cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-wws-v1/Cargo.toml -- -D warnings
$(foreach shim,$(SHIMS),cargo fmt --all --manifest-path=containerd-shim-$(shim)-v1/Cargo.toml -- --check;)
$(foreach shim,$(SHIMS),cargo clippy --all-targets --all-features --workspace --manifest-path=containerd-shim-$(shim)-v1/Cargo.toml -- -D warnings;)

.PHONY: build
build: build-spin-cross-$(TARGET) build-slight-cross-$(TARGET) build-wws-cross-$(TARGET)
build: $(foreach shim,$(SHIMS),build-$(shim)-cross-$(TARGET))
echo "Build complete"

.PHONY: install-cross
Expand All @@ -45,85 +47,40 @@ install-rust-targets:
rustup target add wasm32-wasi && rustup target add wasm32-unknown-unknown

# build-cross can be be used to build any cross supported target (make build-cross-x86_64-unknown-linux-musl)
.PHONY: build-spin-cross-%
build-spin-cross-%: install-cross
cross build --release --target $* --manifest-path=containerd-shim-spin-v1/Cargo.toml -vvv

.PHONY: build-slight-cross-%
build-slight-cross-%: install-cross
cross build --release --target $* --manifest-path=containerd-shim-slight-v1/Cargo.toml -vvv

.PHONY: build-wws-cross-%
build-wws-cross-%: install-cross
cross build --release --target $* --manifest-path=containerd-shim-wws-v1/Cargo.toml -vvv

.PHONY: build-spin
build-spin: install-rust-targets
cargo build --release --manifest-path=containerd-shim-spin-v1/Cargo.toml
.PHONY: $(BUILD_TARGETS)
$(BUILD_TARGETS): SHIM = $(word 2,$(subst -, ,$@))
$(BUILD_TARGETS): install-cross
cross build --release --target $(TARGET) --manifest-path=containerd-shim-$(SHIM)-v1/Cargo.toml $(VERBOSE_FLAG)

.PHONY: build-slight
build-slight: install-rust-targets
cargo build --release --manifest-path=containerd-shim-slight-v1/Cargo.toml

.PHONY: build-wws
build-wss:
cargo build --release --manifest-path=containerd-shim-wws-v1/Cargo.toml
.PHONY: build-%
build-%: install-rust-targets
cargo build --release --manifest-path=containerd-shim-$*-v1/Cargo.toml

.PHONY: install
install: build-spin build-slight build-wws
install: $(foreach shim,$(SHIMS),build-$(shim))
sudo $(INSTALL) containerd-shim-*/target/release/containerd-shim-*-v1 $(PREFIX)/bin

.PHONY: update-deps
update-deps:
cargo update

test/out_spin/img.tar: images/spin/Dockerfile
test/out_%/img.tar: images/%/Dockerfile
mkdir -p $(@D)
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SPIN) ./images/spin
docker save -o $@ $(TEST_IMG_NAME_SPIN)
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_$*) ./images/$*
docker save -o $@ $(TEST_IMG_NAME_$*)

test/out_slight/img.tar: images/slight/Dockerfile
mkdir -p $(@D)
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SLIGHT) ./images/slight
docker save -o $@ $(TEST_IMG_NAME_SLIGHT)
load: $(foreach shim,$(SHIMS),test/out_$(shim)/img.tar)
$(foreach shim,$(SHIMS),sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_$(shim)/img.tar;)

test/out_wws/img.tar: images/wws/Dockerfile
mkdir -p $(@D)
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_WWS) ./images/wws
docker save -o $@ $(TEST_IMG_NAME_WWS)

load: test/out_spin/img.tar test/out_slight/img.tar test/out_wws/img.tar
sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_spin/img.tar
sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_slight/img.tar
sudo ctr -n $(CONTAINERD_NAMESPACE) image import test/out_wws/img.tar

.PHONY: run_spin
run_spin: install load
sudo ctr run --net-host --rm --runtime=io.containerd.spin.v1 docker.io/library/$(TEST_IMG_NAME_SPIN) testspin

.PHONY: run_slight
run_slight: install load
sudo ctr run --net-host --rm --runtime=io.containerd.slight.v1 docker.io/library/$(TEST_IMG_NAME_SLIGHT) testslight

.PHONY: run_wws
run_wws: install load
sudo ctr run --net-host --rm --runtime=io.containerd.wws.v1 docker.io/library/$(TEST_IMG_NAME_WWS) testwws
.PHONY: run_%
run_%: install load
sudo ctr run --net-host --rm --runtime=io.containerd.$*.v1 docker.io/library/$(TEST_IMG_NAME_$*) test$*

.PHONY: clean
clean: clean-slight clean-spin clean-wws
test -f $(PREFIX)/bin/containerd-shim-spin-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-spin-v1 || true
test -f $(PREFIX)/bin/containerd-shim-slight-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-slight-v1 || true
test -f $(PREFIX)/bin/containerd-shim-wws-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-wws-v1 || true
clean: $(addprefix clean-,$(SHIMS))
$(foreach shim,$(SHIMS),test -f $(PREFIX)/bin/containerd-shim-$(shim)-v1 && sudo rm -rf $(PREFIX)/bin/containerd-shim-$(proj)-v1 || true;)
test -d ./test && sudo rm -rf ./test || true

.PHONY: clean-spin
clean-spin:
cargo clean --manifest-path containerd-shim-spin-v1/Cargo.toml

.PHONY: clean-slight
clean-slight:
cargo clean --manifest-path containerd-shim-slight-v1/Cargo.toml

.PHONY: clean-wws
clean-wss:
cargo clean --manifest-path containerd-shim-wws-v1/Cargo.toml
.PHONY: clean-%
clean-%:
cargo clean --manifest-path containerd-shim-$*-v1/Cargo.toml
37 changes: 13 additions & 24 deletions deployments/k3d/Makefile
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
SHIMS = spin slight wws

IMAGE_NAME ?= k3swithshims
CLUSTER_NAME ?= k3s-default
PLATFORM ?= linux/amd64
ARCH ?= x86_64
TARGET ?= $(ARCH)-unknown-linux-musl
TEST_IMG_NAME_SPIN ?= wasmtest_spin:latest
TEST_IMG_NAME_SLIGHT ?= wasmtest_slight:latest
TEST_IMG_NAME_WWS ?= wasmtest_wws:latest

compile-musl-spin:
make build-spin-cross-$(TARGET) -C ../..
TEST_IMG_NAME_spin ?= wasmtest_spin:latest
TEST_IMG_NAME_slight ?= wasmtest_slight:latest
TEST_IMG_NAME_wws ?= wasmtest_wws:latest

compile-musl-slight:
make build-slight-cross-$(TARGET) -C ../..
compile-musl-%:
make build-$*-cross-$(TARGET) -C ../..

compile-musl-wws:
make build-wws-cross-$(TARGET) -C ../..

move-musl-to-tmp: compile-musl-spin compile-musl-slight compile-musl-wws
move-musl-to-tmp: $(addprefix compile-musl-,$(SHIMS))
mkdir -p ./.tmp
cp ../../containerd-shim-slight-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/
cp ../../containerd-shim-spin-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/
cp ../../containerd-shim-wws-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/
$(foreach shim,$(SHIMS),cp ../../containerd-shim-$(shim)-v1/target/$(TARGET)/release/containerd-shim-*-v1 ./.tmp/;)


build-multi-k3d-image: move-musl-to-tmp
docker buildx build -t $(IMAGE_NAME) --platform linux/amd64,linux/arm64 .
Expand All @@ -32,23 +27,17 @@ create-k3d: build-dev-k3d-image
k3d cluster create $(CLUSTER_NAME) --image $(IMAGE_NAME) --api-port 6550 -p "8081:80@loadbalancer" --agents 1

build-workload-images:
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SPIN) ../../images/spin
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_SLIGHT) ../../images/slight
docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_WWS) ../../images/wws
$(foreach shim,$(SHIMS),docker buildx build --platform=wasi/wasm --load -t $(TEST_IMG_NAME_$(shim)) ../../images/$(shim);)

load-workload-images: build-workload-images
k3d image load $(TEST_IMG_NAME_SPIN)
k3d image load $(TEST_IMG_NAME_SLIGHT)
k3d image load $(TEST_IMG_NAME_WWS)
$(foreach shim,$(SHIMS),k3d image load $(TEST_IMG_NAME_$(shim));)

up: create-k3d load-workload-images
kubectl label nodes k3d-k3s-default-agent-0 spin-enabled=true slight-enabled=true wws-enabled=true
kubectl apply -f ./workload

test:
curl localhost:8081/spin/hello
curl localhost:8081/slight/hello
curl localhost:8081/wws/hello
$(foreach shim,$(SHIMS),curl localhost:8081/$(shim)/hello;)

integration: move-musl-to-tmp
cd ../.. && cargo test -- --nocapture
Expand Down

0 comments on commit ea67517

Please sign in to comment.