From 40120667f71e4ad9bae848dc562b4dfb448c3539 Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Thu, 21 Dec 2023 20:02:28 -0500 Subject: [PATCH 1/2] Add a Dockerfile for building and running natter. --- .dockerignore | 3 +++ Cargo.toml | 6 ++++++ docker/natter/Dockerfile | 13 +++++++++++++ docker/natter/Makefile | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 54 insertions(+) create mode 100644 .dockerignore create mode 100644 docker/natter/Dockerfile create mode 100644 docker/natter/Makefile diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..0343bec --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +**/.git +target/ +org_test_documents/ diff --git a/Cargo.toml b/Cargo.toml index e7f395a..9b552d9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -32,3 +32,9 @@ serde_json = "1.0.107" tokio = { version = "1.30.0", default-features = false, features = ["rt", "rt-multi-thread", "fs", "io-util"] } toml = "0.8.2" walkdir = "2.4.0" + +# Optimized build for any sort of release. +[profile.release-lto] +inherits = "release" +lto = true +strip = "symbols" diff --git a/docker/natter/Dockerfile b/docker/natter/Dockerfile new file mode 100644 index 0000000..f45caee --- /dev/null +++ b/docker/natter/Dockerfile @@ -0,0 +1,13 @@ +FROM rustlang/rust:nightly-alpine3.17 AS builder + +RUN apk add --no-cache musl-dev + +RUN mkdir /root/natter +WORKDIR /root/natter +COPY . . +# TODO: Add static build, which currently errors due to proc_macro. RUSTFLAGS="-C target-feature=+crt-static" +RUN CARGO_TARGET_DIR=/target cargo build --profile release-lto + +FROM alpine:3.17 AS runner + +COPY --from=builder /target/release-lto/natter /usr/bin/ diff --git a/docker/natter/Makefile b/docker/natter/Makefile new file mode 100644 index 0000000..115f1bd --- /dev/null +++ b/docker/natter/Makefile @@ -0,0 +1,32 @@ +SHELL := bash +.ONESHELL: +.SHELLFLAGS := -eu -o pipefail -c +.DELETE_ON_ERROR: +MAKEFLAGS += --warn-undefined-variables +MAKEFLAGS += --no-builtin-rules +OS:=$(shell uname -s) + +ifeq ($(origin .RECIPEPREFIX), undefined) + $(error This Make does not support .RECIPEPREFIX. Please use GNU Make 4.0 or later) +endif +.RECIPEPREFIX = > + +IMAGE_NAME:=natter +TARGET := + +.PHONY: help +help: +> @grep -h "##" $(MAKEFILE_LIST) | grep -v grep | sed -E 's/^([^:]*): *## */\1: /' + +.PHONY: build +build: ## Build the docker image. +> docker build --tag $(IMAGE_NAME) --target=$(TARGET) --file Dockerfile ../../ + +.PHONY: shell +shell: ## Launch an interactive shell inside the docker image. +shell: build +> docker run --rm -i -t --entrypoint /bin/sh --mount type=tmpfs,destination=/tmp $(IMAGE_NAME) + +.PHONY: clean +clean: +> docker rmi $(IMAGE_NAME) From f7874c1843fb2a64ac2439835cb01e6044cff71d Mon Sep 17 00:00:00 2001 From: Tom Alexander Date: Thu, 21 Dec 2023 20:20:21 -0500 Subject: [PATCH 2/2] Add lighthouse job to build the natter images. --- .lighthouse/pipeline-build-natter.yaml | 152 +++++++++++++++++++++++++ .lighthouse/triggers.yaml | 11 ++ 2 files changed, 163 insertions(+) create mode 100644 .lighthouse/pipeline-build-natter.yaml create mode 100644 .lighthouse/triggers.yaml diff --git a/.lighthouse/pipeline-build-natter.yaml b/.lighthouse/pipeline-build-natter.yaml new file mode 100644 index 0000000..3bb3bc5 --- /dev/null +++ b/.lighthouse/pipeline-build-natter.yaml @@ -0,0 +1,152 @@ +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: + name: build-natter +spec: + pipelineSpec: + params: + - name: image-name + description: The name for the built image + type: string + - name: path-to-image-context + description: The path to the build context + type: string + - name: path-to-dockerfile + description: The path to the Dockerfile + type: string + tasks: + - name: report-pending + taskRef: + name: gitea-set-status + runAfter: + - fetch-repository + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has started" + - name: STATE + value: pending + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: fetch-repository + taskRef: + name: git-clone + workspaces: + - name: output + workspace: git-source + params: + - name: url + value: $(params.REPO_URL) + - name: revision + value: $(params.PULL_BASE_SHA) + - name: deleteExisting + value: "true" + - name: build-image-runner + taskRef: + name: kaniko + params: + - name: IMAGE + value: "$(params.image-name):$(tasks.fetch-repository.results.commit)" + - name: CONTEXT + value: $(params.path-to-image-context) + - name: DOCKERFILE + value: $(params.path-to-dockerfile) + - name: BUILDER_IMAGE + value: "gcr.io/kaniko-project/executor:v1.12.1" + - name: EXTRA_ARGS + value: + - "--destination=$(params.image-name)" # Also write the :latest image + - --cache=true + - --cache-copy-layers + - --cache-repo=harbor.fizz.buzz/kanikocache/cache + - --use-new-run # Should result in a speed-up + - --reproducible # To remove timestamps so layer caching works. + - --snapshot-mode=redo + - --skip-unused-stages=true + - --registry-mirror=dockerhub.dockerhub.svc.cluster.local + workspaces: + - name: source + workspace: git-source + - name: dockerconfig + workspace: docker-credentials + runAfter: + - fetch-repository + finally: + - name: report-success + when: + - input: "$(tasks.status)" + operator: in + values: ["Succeeded", "Completed"] + taskRef: + name: gitea-set-status + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has succeeded" + - name: STATE + value: success + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: report-failure + when: + - input: "$(tasks.status)" + operator: in + values: ["Failed"] + taskRef: + name: gitea-set-status + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has failed" + - name: STATE + value: failure + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + workspaces: + - name: git-source + - name: docker-credentials + - name: cargo-cache + workspaces: + - name: git-source + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: rust-source + - name: docker-credentials + secret: + secretName: harbor-plain + serviceAccountName: build-bot + timeout: 240h0m0s + params: + - name: image-name + value: "harbor.fizz.buzz/private/natter" + - name: path-to-image-context + value: . + - name: path-to-dockerfile + value: docker/natter/Dockerfile diff --git a/.lighthouse/triggers.yaml b/.lighthouse/triggers.yaml new file mode 100644 index 0000000..0af244d --- /dev/null +++ b/.lighthouse/triggers.yaml @@ -0,0 +1,11 @@ +apiVersion: config.lighthouse.jenkins-x.io/v1alpha1 +kind: TriggerConfig +spec: + postsubmits: + - name: build-natter + source: "pipeline-build-natter.yaml" + # Override https-based url from lighthouse events. + clone_uri: "git@code.fizz.buzz:talexander/natter.git" + branches: + - ^main$ + - ^master$