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

feat: simplify makefiles and CI #118

Merged
merged 2 commits into from
Jul 31, 2023
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
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
Mossaka marked this conversation as resolved.
Show resolved Hide resolved
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
Loading