From fe7d3ac2271d1a5a0788cdf2c3da697867816a70 Mon Sep 17 00:00:00 2001 From: Mirco Date: Wed, 24 May 2023 11:42:11 +0200 Subject: [PATCH 1/5] [skip-ci] Define ENV vars and COPY PATH ../docker/root --- .../docker-federated/image/Dockerfile | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/infrastructure/docker-federated/image/Dockerfile b/infrastructure/docker-federated/image/Dockerfile index ace4fb6..4dc288c 100644 --- a/infrastructure/docker-federated/image/Dockerfile +++ b/infrastructure/docker-federated/image/Dockerfile @@ -1,29 +1,30 @@ #Build stage -FROM docker.io/library/golang:1.20-alpine3.17 AS build-env +FROM docker.io/library/golang:1.20.4-alpine3.18 AS build-env ARG GOPROXY ENV GOPROXY ${GOPROXY:-direct} -ARG GITEA_VERSION +#ARG GITEA_VERSION ARG TAGS="sqlite sqlite_unlock_notify" ENV TAGS "bindata timetzdata $TAGS" ARG CGO_EXTRA_CFLAGS -ARG FORGEJO_GIT_URL="https://codeberg.org/forgejo/forgejo.git" -ARG FORGEJO_BRANCH="forgejo-federation" -ARG FORGEJO_FOLDER="forgejo-fed" +ENV FORGEJO_GIT_URL "https://codeberg.org/forgejo/forgejo.git" +ENV FORGEJO_BRANCH "forgejo-federation" +#ENV FORGEJO_FOLDER "forgejo-fed" #Build deps RUN apk --no-cache add build-base git nodejs npm #Setup repo -RUN git clone --single-branch --branch FORGEJO_BRANCH FORGEJO_GIT_URL FORGEJO_FOLDER -COPY FORGEJO_FOLDER/* ${GOPATH}/src/code.gitea.io/gitea +RUN git clone --single-branch --branch ${FORGEJO_BRANCH} ${FORGEJO_GIT_URL} ${GOPATH}/src/code.gitea.io/gitea +#${FORGEJO_FOLDER} +#COPY ${FORGEJO_FOLDER} ${GOPATH}/src/code.gitea.io/gitea WORKDIR ${GOPATH}/src/code.gitea.io/gitea #Checkout version if set -RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \ - && make clean-all build +#RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \ +RUN make clean-all build # Begin env-to-ini build RUN go build contrib/environment-to-ini/environment-to-ini.go @@ -67,7 +68,7 @@ VOLUME ["/data"] ENTRYPOINT ["/usr/bin/entrypoint"] CMD ["/bin/s6-svscan", "/etc/s6"] -COPY docker/root / +COPY --from=build-env /go/src/code.gitea.io/gitea/docker/root / COPY --from=build-env /go/src/code.gitea.io/gitea/gitea /app/gitea/gitea COPY --from=build-env /go/src/code.gitea.io/gitea/environment-to-ini /usr/local/bin/environment-to-ini COPY --from=build-env /go/src/code.gitea.io/gitea/contrib/autocompletion/bash_autocomplete /etc/profile.d/gitea_bash_autocomplete.sh From 2af76f85579f58a6ee35c74e24f6136a295ec201 Mon Sep 17 00:00:00 2001 From: Mirco Date: Tue, 30 May 2023 08:47:59 +0200 Subject: [PATCH 2/5] [skip-ci] use ci to publish docker image --- .gitlab-ci.yml | 8 ++++++++ infrastructure/docker-federated/build.py | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6f746f2..747366c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -114,3 +114,11 @@ release: --assets-link "{\"name\":\"c4k-forgejo.js\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/c4k-forgejo/-/jobs/${CI_JOB_ID}/artifacts/file/target/frontend-build/c4k-forgejo.js\"}" \ --assets-link "{\"name\":\"c4k-forgejo.js.sha256\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/c4k-forgejo/-/jobs/${CI_JOB_ID}/artifacts/file/target/frontend-build/c4k-forgejo.js.sha256\"}" \ --assets-link "{\"name\":\"c4k-forgejo.js.sha512\",\"url\":\"https://gitlab.com/domaindrivenarchitecture/c4k-forgejo/-/jobs/${CI_JOB_ID}/artifacts/file/target/frontend-build/c4k-forgejo.js.sha512\"}" \ + +forgejo-image-test-publish: + image: domaindrivenarchitecture/devops-build:latest + stage: image + rules: + - if: '$CI_COMMIT_TAG != null' + script: + - cd infrastructure/docker-federated && pyb image test publish \ No newline at end of file diff --git a/infrastructure/docker-federated/build.py b/infrastructure/docker-federated/build.py index 9919c53..89be081 100644 --- a/infrastructure/docker-federated/build.py +++ b/infrastructure/docker-federated/build.py @@ -12,7 +12,7 @@ class MyBuild(DevopsDockerBuild): @init def initialize(project): - project.build_depends_on('ddadevops>=0.12.4') + project.build_depends_on('ddadevops>=0.15.5') stage = 'prod' dockerhub_user = environ.get('DOCKERHUB_USER') if not dockerhub_user: From b689d520ce065800042eac29a14644b0f45d8f3f Mon Sep 17 00:00:00 2001 From: Michael Jerger Date: Tue, 30 May 2023 09:20:58 +0200 Subject: [PATCH 3/5] wrote tests upfront --- src/main/cljc/dda/c4k_forgejo/core.cljc | 2 +- src/main/cljc/dda/c4k_forgejo/forgejo.cljc | 16 +++++----------- src/main/resources/forgejo/deployment.yaml | 2 +- src/test/cljc/dda/c4k_forgejo/forgejo_test.cljc | 14 ++++++++++++-- .../resources/forgejo-test/valid-config.yaml | 2 +- 5 files changed, 20 insertions(+), 16 deletions(-) diff --git a/src/main/cljc/dda/c4k_forgejo/core.cljc b/src/main/cljc/dda/c4k_forgejo/core.cljc index d63b477..1dad792 100644 --- a/src/main/cljc/dda/c4k_forgejo/core.cljc +++ b/src/main/cljc/dda/c4k_forgejo/core.cljc @@ -43,7 +43,7 @@ (postgres/generate-deployment {:postgres-image "postgres:14" :postgres-size :2gb}) (postgres/generate-service) - (forgejo/generate-deployment) + (forgejo/generate-deployment config) (forgejo/generate-service) (forgejo/generate-service-ssh) (forgejo/generate-data-volume config) diff --git a/src/main/cljc/dda/c4k_forgejo/forgejo.cljc b/src/main/cljc/dda/c4k_forgejo/forgejo.cljc index 0a011dd..48028d1 100644 --- a/src/main/cljc/dda/c4k_forgejo/forgejo.cljc +++ b/src/main/cljc/dda/c4k_forgejo/forgejo.cljc @@ -21,7 +21,7 @@ (pred/string-of-separated-by? pred/fqdn-string? #"," input))) (s/def ::default-app-name string?) -(s/def ::forgejo-image-name string?) +(s/def ::federated boolean?) (s/def ::fqdn pred/fqdn-string?) (s/def ::mailer-from pred/bash-env-string?) (s/def ::mailer-host pred/bash-env-string?) @@ -39,11 +39,11 @@ ::mailer-from ::mailer-host ::mailer-port - ::service-noreply-address - ::deploy-federated] + ::service-noreply-address] :opt-un [::issuer ::default-app-name - ::service-domain-whitelist])) + ::service-domain-whitelist + ::federated])) (def auth? (s/keys :req-un [::postgres/postgres-db-user ::postgres/postgres-db-password ::mailer-user ::mailer-pw])) @@ -121,13 +121,7 @@ ; ToDo: Need to add default image-name to config? Or hardcode? (defn-spec generate-deployment pred/map-or-seq? [config config?] - (let [{:keys [deploy-federated]} config - deploy-federated-bool (boolean (Boolean/valueOf deploy-federated))] - (-> - (yaml/load-as-edn "forgejo/deployment.yaml") - #(if deploy-federated-bool - (cm/replace-all-matching-values-by-new-value % "IMAGE_NAME" federated-image-name) - (cm/replace-all-matching-values-by-new-value %"IMAGE_NAME" default-name))))) + (yaml/load-as-edn "forgejo/deployment.yaml")) (defn generate-service [] diff --git a/src/main/resources/forgejo/deployment.yaml b/src/main/resources/forgejo/deployment.yaml index 93fa1ef..110ec43 100644 --- a/src/main/resources/forgejo/deployment.yaml +++ b/src/main/resources/forgejo/deployment.yaml @@ -18,7 +18,7 @@ spec: spec: containers: - name: forgejo - image: codeberg.org/meissa/forgejo:federated-latest #codeberg.org/forgejo/forgejo:1.19 + image: codeberg.org/forgejo/forgejo:1.19 imagePullPolicy: IfNotPresent # config settings envFrom: diff --git a/src/test/cljc/dda/c4k_forgejo/forgejo_test.cljc b/src/test/cljc/dda/c4k_forgejo/forgejo_test.cljc index ef03fa6..1887e1a 100644 --- a/src/test/cljc/dda/c4k_forgejo/forgejo_test.cljc +++ b/src/test/cljc/dda/c4k_forgejo/forgejo_test.cljc @@ -29,7 +29,9 @@ :FORGEJO__service__EMAIL_DOMAIN_WHITELIST-c1 "adb.de", :FORGEJO__service__EMAIL_DOMAIN_WHITELIST-c2 "test.com,test.net", :FORGEJO__service__NO_REPLY_ADDRESS-c1 "", - :FORGEJO__service__NO_REPLY_ADDRESS-c2 "noreply@test.com"} + :FORGEJO__service__NO_REPLY_ADDRESS-c2 "noreply@test.com" + :FORGEJO__federation__ENABLED-c1 "true" + :FORGEJO__federation__ENABLED-c2 "false"} (th/map-diff (cut/generate-appini-env {:default-app-name "" :fqdn "test.de" :mailer-from "" @@ -37,6 +39,7 @@ :mailer-port "123" :service-domain-whitelist "adb.de" :service-noreply-address "" + :federated true }) (cut/generate-appini-env {:default-app-name "test forgejo" :fqdn "test.com" @@ -45,6 +48,7 @@ :mailer-port "456" :service-domain-whitelist "test.com,test.net" :service-noreply-address "noreply@test.com" + :federated false }))))) (deftest should-generate-secret @@ -69,4 +73,10 @@ (is (= {:storage-c1 "1Gi", :storage-c2 "15Gi"} (th/map-diff (cut/generate-data-volume {:volume-total-storage-size 1}) - (cut/generate-data-volume {:volume-total-storage-size 15}))))) \ No newline at end of file + (cut/generate-data-volume {:volume-total-storage-size 15}))))) + +(deftest should-generate-deployment + (is (= {:image-c1 "codeberg.org/forgejo/forgejo:1.19", + :image-c2 "domaindrivenarchitecture/c4k-forgejo-fed"} + (th/map-diff (cut/generate-deployment {:federated false}) + (cut/generate-deployment {:federated true}))))) \ No newline at end of file diff --git a/src/test/resources/forgejo-test/valid-config.yaml b/src/test/resources/forgejo-test/valid-config.yaml index d847ff9..a16d121 100644 --- a/src/test/resources/forgejo-test/valid-config.yaml +++ b/src/test/resources/forgejo-test/valid-config.yaml @@ -8,7 +8,7 @@ service-whitelist-domains: "test.de" service-noreply-address: "noreply@test.de" volume-total-storage-size: 6 restic-repository: "repo-path" -deploy-federated: "false" +federated: false mon-cfg: grafana-cloud-url: "url-for-your-prom-remote-write-endpoint" cluster-name: "forgejo" From 75d34278938dd0f30fd498756e43a611198f2bd7 Mon Sep 17 00:00:00 2001 From: Mirco Date: Thu, 1 Jun 2023 12:15:45 +0200 Subject: [PATCH 4/5] Add severspec test, rm resources --- infrastructure/docker-federated/build.py | 1 - infrastructure/docker-federated/image/Dockerfile | 7 ++----- .../docker-federated/image/resources/install.sh | 4 ---- infrastructure/docker-federated/test/Dockerfile | 10 ++++++++++ infrastructure/docker-federated/test/serverspec.edn | 8 ++++++++ 5 files changed, 20 insertions(+), 10 deletions(-) delete mode 100755 infrastructure/docker-federated/image/resources/install.sh create mode 100644 infrastructure/docker-federated/test/Dockerfile create mode 100644 infrastructure/docker-federated/test/serverspec.edn diff --git a/infrastructure/docker-federated/build.py b/infrastructure/docker-federated/build.py index 89be081..6b3cf58 100644 --- a/infrastructure/docker-federated/build.py +++ b/infrastructure/docker-federated/build.py @@ -49,4 +49,3 @@ def publish(project): def test(project): build = get_devops_build(project) build.test() - diff --git a/infrastructure/docker-federated/image/Dockerfile b/infrastructure/docker-federated/image/Dockerfile index 4dc288c..bf2e710 100644 --- a/infrastructure/docker-federated/image/Dockerfile +++ b/infrastructure/docker-federated/image/Dockerfile @@ -11,26 +11,23 @@ ARG CGO_EXTRA_CFLAGS ENV FORGEJO_GIT_URL "https://codeberg.org/forgejo/forgejo.git" ENV FORGEJO_BRANCH "forgejo-federation" -#ENV FORGEJO_FOLDER "forgejo-fed" #Build deps RUN apk --no-cache add build-base git nodejs npm #Setup repo RUN git clone --single-branch --branch ${FORGEJO_BRANCH} ${FORGEJO_GIT_URL} ${GOPATH}/src/code.gitea.io/gitea -#${FORGEJO_FOLDER} -#COPY ${FORGEJO_FOLDER} ${GOPATH}/src/code.gitea.io/gitea + WORKDIR ${GOPATH}/src/code.gitea.io/gitea #Checkout version if set -#RUN if [ -n "${GITEA_VERSION}" ]; then git checkout "${GITEA_VERSION}"; fi \ RUN make clean-all build # Begin env-to-ini build RUN go build contrib/environment-to-ini/environment-to-ini.go # Run stage -FROM docker.io/library/alpine:3.17 +FROM docker.io/library/alpine:3.18 LABEL maintainer="contact@forgejo.org" EXPOSE 22 3000 diff --git a/infrastructure/docker-federated/image/resources/install.sh b/infrastructure/docker-federated/image/resources/install.sh deleted file mode 100755 index 1937557..0000000 --- a/infrastructure/docker-federated/image/resources/install.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -install -m 0700 /tmp/entrypoint.sh / -install -m 0700 /tmp/functions.sh /usr/local/bin/ - diff --git a/infrastructure/docker-federated/test/Dockerfile b/infrastructure/docker-federated/test/Dockerfile new file mode 100644 index 0000000..10de78a --- /dev/null +++ b/infrastructure/docker-federated/test/Dockerfile @@ -0,0 +1,10 @@ +FROM c4k-forgejo-fed + +RUN apk --no-cache add openjdk11-jre-headless + +RUN curl -L -o /tmp/serverspec.jar \ + https://github.com/DomainDrivenArchitecture/dda-serverspec-crate/releases/download/2.0.0/dda-serverspec-standalone.jar + +COPY serverspec.edn /tmp/serverspec.edn + +RUN java -jar /tmp/serverspec.jar /tmp/serverspec.edn -v diff --git a/infrastructure/docker-federated/test/serverspec.edn b/infrastructure/docker-federated/test/serverspec.edn new file mode 100644 index 0000000..7c95886 --- /dev/null +++ b/infrastructure/docker-federated/test/serverspec.edn @@ -0,0 +1,8 @@ +{:file [{:path "/usr/bin/entrypoint" :mod "755"} + {:path "/app/gitea/gitea" :mod "755"} + {:path "/usr/local/bin/gitea" :mod "755"} + {:path "/usr/local/bin/environment-to-ini" :mod "755"} + {:path "/etc/s6/gitea/" :mod "755"} + {:path "/etc/s6/openssh/" :mod "755"} + {:path "/etc/s6/.s6-svscan/" :mod "755"} + {:path "/etc/profile.d/gitea_bash_autocomplete.sh" :mod "644"}]} From 0f626a040dc8cc4ca2f25d680942eb54e5768e8f Mon Sep 17 00:00:00 2001 From: Mirco Date: Thu, 1 Jun 2023 20:27:56 +0200 Subject: [PATCH 5/5] One failure remaining in Testdriven Design; Decision if federated true/false in forgejo.cljc not working --- src/main/cljc/dda/c4k_forgejo/forgejo.cljc | 19 ++++++++++++++----- .../forgejo/appini-env-configmap.yaml | 2 +- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/main/cljc/dda/c4k_forgejo/forgejo.cljc b/src/main/cljc/dda/c4k_forgejo/forgejo.cljc index 48028d1..cd3becc 100644 --- a/src/main/cljc/dda/c4k_forgejo/forgejo.cljc +++ b/src/main/cljc/dda/c4k_forgejo/forgejo.cljc @@ -72,9 +72,11 @@ mailer-host mailer-port service-domain-whitelist - service-noreply-address] + service-noreply-address + federated] :or {default-app-name "forgejo instance" - service-domain-whitelist fqdn}} + service-domain-whitelist fqdn + federated false}} config] (-> (yaml/load-as-edn "forgejo/appini-env-configmap.yaml") @@ -85,7 +87,8 @@ (cm/replace-all-matching-values-by-new-value "MAILERHOST" mailer-host) (cm/replace-all-matching-values-by-new-value "MAILERPORT" mailer-port) (cm/replace-all-matching-values-by-new-value "WHITELISTDOMAINS" service-domain-whitelist) - (cm/replace-all-matching-values-by-new-value "NOREPLY" service-noreply-address)))) + (cm/replace-all-matching-values-by-new-value "NOREPLY" service-noreply-address) + (cm/replace-all-matching-values-by-new-value "FEDERATED" (str federated))))) (defn generate-secrets [auth] @@ -120,8 +123,14 @@ ; ToDo: Need to add federated-image-name to config? Or hardcode? ; ToDo: Need to add default image-name to config? Or hardcode? (defn-spec generate-deployment pred/map-or-seq? - [config config?] - (yaml/load-as-edn "forgejo/deployment.yaml")) + [config] + (let [{:keys [federated]} config] + + ; TODO: if + if (= federated true) + (-> + (yaml/load-as-edn "forgejo/deployment.yaml") + (cm/replace-all-matching-values-by-new-value "codeberg.org/forgejo/forgejo:1.19" "domaindrivenarchitecture/c4k-forgejo-fed")))) (defn generate-service [] diff --git a/src/main/resources/forgejo/appini-env-configmap.yaml b/src/main/resources/forgejo/appini-env-configmap.yaml index 632d02a..c9d8c33 100644 --- a/src/main/resources/forgejo/appini-env-configmap.yaml +++ b/src/main/resources/forgejo/appini-env-configmap.yaml @@ -24,7 +24,7 @@ data: RUN_USER: git #[federation] - FORGEJO__federation__ENABLED: "true" + FORGEJO__federation__ENABLED: FEDERATED #[indexer] FORGEJO__indexer__ISSUE_INDEXER_PATH: /data/gitea/indexers/issues.bleve