diff --git a/.lighthouse/pipeline-build-homepage-staging.yaml b/.lighthouse/pipeline-build-homepage-staging.yaml index 99b847e..1506a02 100644 --- a/.lighthouse/pipeline-build-homepage-staging.yaml +++ b/.lighthouse/pipeline-build-homepage-staging.yaml @@ -49,6 +49,8 @@ spec: runAfter: - fetch-repository - fetch-repository-private + - fetch-repository-explorer + - fetch-repository-organic params: - name: CONTEXT value: "$(params.JOB_NAME)" @@ -130,6 +132,137 @@ spec: runAfter: - get-time - report-pending + - name: fetch-repository-explorer + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/git-clone/0.9/git-clone.yaml + workspaces: + - name: output + workspace: git-source-explorer + params: + - name: url + value: git@code.fizz.buzz:talexander/organic_ast_explorer.git + - name: revision + value: main + - name: deleteExisting + value: "true" + - name: fetch-repository-organic + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/git-clone/0.9/git-clone.yaml + workspaces: + - name: output + workspace: git-source-organic + params: + - name: url + value: git@code.fizz.buzz:talexander/organic.git + - name: revision + value: main + - name: deleteExisting + value: "true" + - name: build-explorer-image + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/kaniko/0.6//kaniko.yaml + params: + - name: IMAGE + value: "harbor.fizz.buzz/private/homepage-build-organic:$(tasks.get-time.results.unix-time)" + - name: CONTEXT + value: . + - name: DOCKERFILE + value: docker/organic/Dockerfile + - name: BUILDER_IMAGE + value: "gcr.io/kaniko-project/executor:v1.12.1" + - name: EXTRA_ARGS + value: + - "--destination=harbor.fizz.buzz/private/homepage-build-organic" # 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: + - get-time + - report-pending + - name: build-explorer-wasm + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: "$(workspaces.organic.path)" + steps: + - image: "$(params.IMAGE)" + name: build-explorer-wasm + params: + - name: IMAGE + value: "harbor.fizz.buzz/private/homepage-build-organic:$(tasks.get-time.results.unix-time)" + workspaces: + - name: organic + workspace: git-source-organic + runAfter: + - get-time + - build-explorer-image + - name: copy-explorer-files + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: "$(workspaces.source-explorer.path)" + steps: + - image: node:lts-alpine3.19 + name: copy-explorer-files + script: | + #!/usr/bin/env sh + set -euo pipefail + npm install + npm run release + mkdir -p "$(workspaces.source.path)/static/organic/ast_explorer/" + cp -r "$(workspaces.source-explorer.path)/dist/"* "$(workspaces.source.path)/static/organic/ast_explorer/" + workspaces: + - name: source + workspace: git-source + - name: source-explorer + workspace: git-source-explorer + - name: organic + workspace: git-source-organic + runAfter: + - build-explorer-wasm - name: build-image taskRef: resolver: git @@ -167,6 +300,7 @@ spec: workspace: docker-credentials runAfter: - copy-private-files + - copy-explorer-files finally: - name: report-success when: @@ -250,6 +384,26 @@ spec: requests: storage: 10Gi subPath: git-source + - name: git-source-explorer + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: git-source + - name: git-source-organic + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: git-source - name: docker-credentials secret: secretName: harbor-plain diff --git a/.lighthouse/pipeline-build-homepage.yaml b/.lighthouse/pipeline-build-homepage.yaml index d04c198..05c768b 100644 --- a/.lighthouse/pipeline-build-homepage.yaml +++ b/.lighthouse/pipeline-build-homepage.yaml @@ -15,6 +15,27 @@ spec: description: The path to the Dockerfile type: string tasks: + - name: get-time + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: /workspace/source + results: + - name: unix-time + description: The current date in unix timestamp format + steps: + - image: alpine:3.18 + name: get-time-step + script: | + #!/usr/bin/env sh + set -euo pipefail + echo -n "$(date +%s)" | tee $(results.unix-time.path) - name: detect-tag taskSpec: metadata: {} @@ -61,6 +82,8 @@ spec: runAfter: - fetch-repository - fetch-repository-private + - fetch-repository-explorer + - fetch-repository-organic params: - name: CONTEXT value: "$(params.JOB_NAME)" @@ -141,6 +164,137 @@ spec: workspace: git-source-private runAfter: - report-pending + - name: fetch-repository-explorer + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/git-clone/0.9/git-clone.yaml + workspaces: + - name: output + workspace: git-source-explorer + params: + - name: url + value: git@code.fizz.buzz:talexander/organic_ast_explorer.git + - name: revision + value: main + - name: deleteExisting + value: "true" + - name: fetch-repository-organic + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/git-clone/0.9/git-clone.yaml + workspaces: + - name: output + workspace: git-source-organic + params: + - name: url + value: git@code.fizz.buzz:talexander/organic.git + - name: revision + value: main + - name: deleteExisting + value: "true" + - name: build-explorer-image + taskRef: + resolver: git + params: + - name: url + value: https://github.com/tektoncd/catalog.git + - name: revision + value: df36b3853a5657fd883015cdbf07ad6466918acf + - name: pathInRepo + value: task/kaniko/0.6//kaniko.yaml + params: + - name: IMAGE + value: "harbor.fizz.buzz/private/homepage-build-organic:$(tasks.get-time.results.unix-time)" + - name: CONTEXT + value: . + - name: DOCKERFILE + value: docker/organic/Dockerfile + - name: BUILDER_IMAGE + value: "gcr.io/kaniko-project/executor:v1.12.1" + - name: EXTRA_ARGS + value: + - "--destination=harbor.fizz.buzz/private/homepage-build-organic" # 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: + - get-time + - report-pending + - name: build-explorer-wasm + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: "$(workspaces.organic.path)" + steps: + - image: "$(params.IMAGE)" + name: build-explorer-wasm + params: + - name: IMAGE + value: "harbor.fizz.buzz/private/homepage-build-organic:$(tasks.get-time.results.unix-time)" + workspaces: + - name: organic + workspace: git-source-organic + runAfter: + - get-time + - build-explorer-image + - name: copy-explorer-files + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: "$(workspaces.source-explorer.path)" + steps: + - image: node:lts-alpine3.19 + name: copy-explorer-files + script: | + #!/usr/bin/env sh + set -euo pipefail + npm install + npm run release + mkdir -p "$(workspaces.source.path)/static/organic/ast_explorer/" + cp -r "$(workspaces.source-explorer.path)/dist/"* "$(workspaces.source.path)/static/organic/ast_explorer/" + workspaces: + - name: source + workspace: git-source + - name: source-explorer + workspace: git-source-explorer + - name: organic + workspace: git-source-organic + runAfter: + - build-explorer-wasm - name: build-image taskRef: resolver: git @@ -177,7 +331,9 @@ spec: - name: dockerconfig workspace: docker-credentials runAfter: + - detect-tag - copy-private-files + - copy-explorer-files finally: - name: report-success when: @@ -261,6 +417,26 @@ spec: requests: storage: 10Gi subPath: git-source + - name: git-source-explorer + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: git-source + - name: git-source-organic + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: git-source - name: docker-credentials secret: secretName: harbor-plain diff --git a/docker/organic/Dockerfile b/docker/organic/Dockerfile new file mode 100644 index 0000000..3913d54 --- /dev/null +++ b/docker/organic/Dockerfile @@ -0,0 +1,7 @@ +FROM rustlang/rust:nightly-alpine3.17 + +RUN apk add --no-cache musl-dev make bash +RUN rustup target add wasm32-unknown-unknown +RUN cargo install wasm-bindgen-cli + +CMD ["make", "wasm"] diff --git a/docker/organic/Makefile b/docker/organic/Makefile new file mode 100644 index 0000000..7239a4b --- /dev/null +++ b/docker/organic/Makefile @@ -0,0 +1,52 @@ +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:=homepage-build-organic +# REMOTE_REPO:=harbor.fizz.buzz/private +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: push +push: ## Push the docker image to a remote repository. +ifdef REMOTE_REPO +> docker tag $(IMAGE_NAME) $(REMOTE_REPO)/$(IMAGE_NAME) +> docker push $(REMOTE_REPO)/$(IMAGE_NAME) +else +> @echo "REMOTE_REPO not defined, not pushing to a remote repo." +endif + +.PHONY: clean +clean: +> docker rmi $(IMAGE_NAME) +ifdef REMOTE_REPO +> docker rmi $(REMOTE_REPO)/$(IMAGE_NAME) +else +> @echo "REMOTE_REPO not defined, not removing from remote repo." +endif + +.PHONY: run +run: build +run: ## Launch the docker image +> docker run --rm -i -t $(IMAGE_NAME) + +.PHONY: shell +shell: ## Launch an interactive shell inside the docker image. +shell: build +> docker run --rm -i -t --entrypoint /bin/bash --mount type=tmpfs,destination=/tmp $(IMAGE_NAME)