Skip to content

Commit 67fad46

Browse files
authored
Add buildpack/builder/stacks for Rust (#95)
* Add buildpack/builder/stacks for Rust * Fix permission error with a deps layer
1 parent 43b2a77 commit 67fad46

File tree

8 files changed

+93
-2
lines changed

8 files changed

+93
-2
lines changed

Makefile

+8-2
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,15 @@ GO_BUILDER_REPO := quay.io/boson/faas-go-builder
1212
JVM_BUILDER_REPO := quay.io/boson/faas-jvm-builder
1313
QUARKUS_NATIVE_BUILDER_REPO := quay.io/boson/faas-quarkus-native-builder
1414
PYTHON_BUILDER_REPO := quay.io/boson/faas-python-builder
15+
RUST_BUILDER_REPO := quay.io/boson/faas-rust-builder
1516

1617
NODEJS_BUILDPACK_REPO := quay.io/boson/faas-nodejs-bp
1718
GO_BUILDPACK_REPO := quay.io/boson/faas-go-bp
1819
QUARKUS_JVM_BUILDPACK_REPO := quay.io/boson/faas-quarkus-jvm-bp
1920
QUARKUS_NATIVE_BUILDPACK_REPO := quay.io/boson/faas-quarkus-native-bp
2021
SPRINGBOOT_BUILDPACK_REPO := quay.io/boson/faas-springboot-bp
2122
PYTHON_BUILDPACK_REPO := quay.io/boson/faas-python-bp
23+
RUST_BUILDPACK_REPO := quay.io/boson/faas-rust-bp
2224

2325
.PHONY: stacks buildpacks builders
2426

@@ -32,6 +34,7 @@ stacks:
3234
./stacks/build-stack.sh -v $(VERSION_TAG) stacks/jvm
3335
./stacks/build-stack.sh -v $(VERSION_TAG) stacks/quarkus-native
3436
./stacks/build-stack.sh -v $(VERSION_TAG) stacks/python
37+
./stacks/build-stack.sh -v $(VERSION_TAG) stacks/rust
3538

3639
buildpacks:
3740
$(PACK_CMD) buildpack package $(NODEJS_BUILDPACK_REPO):$(VERSION_TAG) --config ./packages/nodejs/package.toml
@@ -40,6 +43,7 @@ buildpacks:
4043
$(PACK_CMD) buildpack package $(QUARKUS_NATIVE_BUILDPACK_REPO):$(VERSION_TAG) --config ./packages/quarkus-native/package.toml
4144
$(PACK_CMD) buildpack package $(SPRINGBOOT_BUILDPACK_REPO):$(VERSION_TAG) --config ./packages/springboot/package.toml
4245
$(PACK_CMD) buildpack package $(PYTHON_BUILDPACK_REPO):$(VERSION_TAG) --config ./packages/python/package.toml
46+
$(PACK_CMD) buildpack package $(RUST_BUILDPACK_REPO):$(VERSION_TAG) --config ./packages/rust/package.toml
4347

4448
builders:
4549
TMP_BLDRS=$(shell mktemp -d) && \
@@ -48,23 +52,25 @@ builders:
4852
sed "s/{{VERSION}}/$(VERSION_TAG)/g" ./builders/go/builder.toml > $$TMP_BLDRS/go.toml && \
4953
sed "s/{{VERSION}}/$(VERSION_TAG)/g" ./builders/jvm/builder.toml > $$TMP_BLDRS/jvm.toml && \
5054
sed "s/{{VERSION}}/$(VERSION_TAG)/g" ./builders/python/builder.toml > $$TMP_BLDRS/python.toml && \
55+
sed "s/{{VERSION}}/$(VERSION_TAG)/g" ./builders/rust/builder.toml > $$TMP_BLDRS/rust.toml && \
5156
$(PACK_CMD) builder create --pull-policy=never $(NODEJS_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/node.toml && \
5257
$(PACK_CMD) builder create --pull-policy=never $(GO_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/go.toml && \
5358
$(PACK_CMD) builder create --pull-policy=never $(JVM_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/jvm.toml && \
5459
$(PACK_CMD) builder create --pull-policy=never $(QUARKUS_NATIVE_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/quarkus-native.toml && \
5560
$(PACK_CMD) builder create --pull-policy=never $(PYTHON_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/python.toml -v && \
61+
$(PACK_CMD) builder create --pull-policy=never $(RUST_BUILDER_REPO):$(VERSION_TAG) --config $$TMP_BLDRS/rust.toml -v && \
5662
rm -fr $$TMP_BLDRS
5763

5864
publish:
5965
docker push $(BASE_REPO):ubi8-minimal-$(VERSION_TAG)
6066
docker push $(BASE_REPO):ubi8-$(VERSION_TAG)
6167

62-
for i in go quarkus-native jvm nodejs python ubi8-minimal ubi8; do \
68+
for i in go quarkus-native jvm nodejs python rust ubi8-minimal ubi8; do \
6369
docker push $(RUN_REPO):$$i-$(VERSION_TAG); \
6470
docker push $(BUILD_REPO):$$i-$(VERSION_TAG); \
6571
done
6672

67-
for img in $(QUARKUS_NATIVE_BUILDPACK_REPO) $(QUARKUS_JVM_BUILDPACK_REPO) $(QUARKUS_NATIVE_BUILDER_REPO) $(JVM_BUILDER_REPO) $(NODEJS_BUILDPACK_REPO) $(GO_BUILDPACK_REPO) $(NODEJS_BUILDER_REPO) $(GO_BUILDER_REPO) $(SPRINGBOOT_BUILDPACK_REPO) $(PYTHON_BUILDPACK_REPO) $(PYTHON_BUILDER_REPO) ; do \
73+
for img in $(QUARKUS_NATIVE_BUILDPACK_REPO) $(QUARKUS_JVM_BUILDPACK_REPO) $(QUARKUS_NATIVE_BUILDER_REPO) $(JVM_BUILDER_REPO) $(NODEJS_BUILDPACK_REPO) $(GO_BUILDPACK_REPO) $(NODEJS_BUILDER_REPO) $(GO_BUILDER_REPO) $(SPRINGBOOT_BUILDPACK_REPO) $(PYTHON_BUILDPACK_REPO) $(PYTHON_BUILDER_REPO) $(RUST_BUILDPACK_REPO) $(RUST_BUILDER_REPO) ; do \
6874
docker push $$img:$(VERSION_TAG); \
6975
if [ "$(VERSION_TAG)" != "tip" ]; then \
7076
docker tag $$img:$(VERSION_TAG) $$img:latest; \

builders/rust/builder.toml

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
[[buildpacks]]
2+
id = "dev.boson.rust"
3+
uri = "docker://quay.io/boson/faas-rust-bp:{{VERSION}}"
4+
5+
[[order]]
6+
[[order.group]]
7+
id = "dev.boson.rust"
8+
9+
[stack]
10+
id = "dev.boson.stacks.rust"
11+
build-image = "quay.io/boson/faas-stack-build:rust-{{VERSION}}"
12+
run-image = "quay.io/boson/faas-stack-run:rust-{{VERSION}}"

buildpacks/rust/bin/build

+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
echo "---> Rust Buildpack"
5+
6+
layers_dir="$1"
7+
8+
deps_dir="${layers_dir}/deps"
9+
10+
mkdir -p "${deps_dir}"
11+
cat <<TOML > "${deps_dir}.toml"
12+
launch = false
13+
build = true
14+
cache = true
15+
TOML
16+
17+
target_dir="${deps_dir}/target"
18+
19+
CARGO_HOME="${deps_dir}" cargo build --release --target-dir="${target_dir}"
20+
21+
app_layer="$layers_dir/app"
22+
mkdir -p "$app_layer"
23+
cat > "$app_layer.toml" << EOF
24+
launch = true
25+
build = false
26+
cache = false
27+
EOF
28+
29+
cp "${target_dir}/release/function" "${app_layer}/function"
30+
31+
cat > "$layers_dir/launch.toml" << EOF
32+
[[processes]]
33+
type = "web"
34+
command = "$app_layer/function"
35+
EOF

buildpacks/rust/bin/detect

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/usr/bin/env bash
2+
set -eo pipefail
3+
4+
if [[ ! -f Cargo.toml ]] ; then
5+
exit 100
6+
fi

buildpacks/rust/buildpack.toml

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
api = "0.2"
2+
3+
[buildpack]
4+
id = "dev.boson.rust"
5+
version = "0.0.1"
6+
name = "Rust Function Buildpack"
7+
8+
[[stacks]]
9+
id = "dev.boson.stacks.rust"

packages/rust/package.toml

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
[buildpack]
2+
uri = "../../buildpacks/rust"

stacks/rust/build/Dockerfile

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
ARG version=tip
2+
FROM quay.io/boson/faas-stack-build:ubi8-${version}
3+
4+
ARG stack_id
5+
ENV CNB_STACK_ID=${stack_id}
6+
LABEL io.buildpacks.stack.id=${stack_id}
7+
8+
USER root
9+
RUN dnf install -y rust cargo \
10+
&& dnf update -y \
11+
&& dnf clean all -y
12+
13+
USER cnb

stacks/rust/run/Dockerfile

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
ARG version=tip
2+
FROM quay.io/boson/faas-stack-run:ubi8-minimal-${version}
3+
4+
ARG stack_id
5+
ENV CNB_STACK_ID=${stack_id}
6+
LABEL io.buildpacks.stack.id=${stack_id}
7+
8+
ENV PORT 8080

0 commit comments

Comments
 (0)