diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c630c71e3..f8b765b92 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -7,6 +7,7 @@ workflow: - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH - if: $CI_MERGE_REQUEST_ID - if: $CI_COMMIT_TAG =~ /^v/ + - if: $CI_COMMIT_TAG =~ /^t/ default: image: @@ -33,8 +34,7 @@ stages: node dependencies: stage: frontend:build script: - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworxNodeDependencies" + - nix -L build -o result ".#uniworxNodeDependencies" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > node-dependencies.nar.xz before_script: &nix-before - git config --global init.defaultBranch master @@ -55,8 +55,7 @@ well known: stage: frontend:build script: - xzcat node-dependencies.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworxWellKnown" + - nix -L build -o result ".#uniworxWellKnown" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > well-known.nar.xz before_script: *nix-before needs: @@ -75,8 +74,7 @@ frontend: script: - xzcat node-dependencies.nar.xz | nix-store --import - xzcat well-known.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworxFrontend" + - nix -L build -o result ".#uniworxFrontend" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > frontend.nar.xz before_script: *nix-before needs: @@ -96,8 +94,7 @@ uniworx:lib:uniworx: stage: backend:build script: - xzcat frontend.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworx:lib:uniworx" + - nix -L build -o result ".#uniworx:lib:uniworx" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > uniworx:lib:uniworx.nar.xz before_script: *nix-before needs: @@ -119,8 +116,7 @@ uniworx:exe:uniworx: stage: backend:build script: - xzcat uniworx:lib:uniworx.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworx:exe:uniworx" + - nix -L build -o result ".#uniworx:exe:uniworx" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > uniworx:exe:uniworx.nar.xz before_script: *nix-before needs: @@ -144,8 +140,7 @@ uniworx:exe:uniworxdb: stage: backend:build script: - xzcat uniworx:lib:uniworx.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworx:exe:uniworxdb" + - nix -L build -o result ".#uniworx:exe:uniworxdb" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > uniworx:exe:uniworxdb.nar.xz before_script: *nix-before needs: @@ -169,8 +164,7 @@ uniworx:exe:uniworxload: stage: backend:build script: - xzcat uniworx:lib:uniworx.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L build -o result "${FLAKE}#uniworx:exe:uniworxload" + - nix -L build -o result ".#uniworx:exe:uniworxload" - nix-store --export $(nix-store -qR result) | xz -T0 -2 > uniworx:exe:uniworxload.nar.xz before_script: *nix-before needs: @@ -195,8 +189,7 @@ check: script: - xzcat frontend.nar.xz | nix-store --import - xzcat uniworx:lib:uniworx.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L flake check ${FLAKE} + - nix -L flake check . before_script: *nix-before needs: - job: node dependencies # transitive @@ -214,8 +207,7 @@ container: stage: container:build script: - xzcat uniworx:exe:uniworx.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - cp -pr --reflink=auto -L $(nix build --print-out-paths "${FLAKE}#uniworxDocker") uniworx.tar.gz + - cp -pr --reflink=auto -L $(nix build --print-out-paths ".#uniworxDocker") uniworx.tar.gz before_script: *nix-before needs: - job: node dependencies # transitive @@ -239,6 +231,34 @@ container: interruptible: true rules: &release-rules - if: $CI_COMMIT_TAG =~ /^v/ +test container: + stage: container:build + script: + - xzcat uniworx:exe:uniworx.nar.xz | nix-store --import + - cp -pr --reflink=auto -L $(nix build --print-out-paths ".#uniworxTestDocker") uniworx.tar.gz + before_script: *nix-before + needs: + - job: node dependencies # transitive + artifacts: false + - job: well known # transitive + artifacts: false + - job: frontend # tranitive + artifacts: false + - job: uniworx:lib:uniworx # transitive + artifacts: false + - job: uniworx:exe:uniworx + artifacts: true + - job: check # sanity + artifacts: false + artifacts: + paths: + - uniworx.tar.gz + name: "${CI_JOB_NAME}-${CI_COMMIT_SHORT_SHA}" + expire_in: "1 day" + retry: 2 + interruptible: true + rules: &test-release-rules + - if: $CI_COMMIT_TAG =~ /^t/ parse changelog: stage: prepare release @@ -249,9 +269,30 @@ parse changelog: before_script: *nix-before script: - xzcat node-dependencies.nar.xz | nix-store --import - - source .gitlab-ci/construct-flake-url.sh - - nix -L run "${FLAKE}#jqChangelogJson" -- -r '.versions[0].version' > .current-version - - nix -L run "${FLAKE}#jqChangelogJson" -- -r '.versions[0].body' > .current-changelog.md + - nix -L run ".#jqChangelogJson" -- -r '.versions[0].version' > .current-version + - nix -L run ".#jqChangelogJson" -- -r '.versions[0].body' > .current-changelog.md + - echo "VERSION=$(cat .current-version)" >> build.env + artifacts: + reports: + dotenv: build.env + paths: + - .current-version + - .current-changelog.md + name: "changelog-${CI_COMMIT_SHORT_SHA}" + expire_in: "1 day" + retry: 2 + interruptible: true +parse test changelog: + stage: prepare release + needs: + - job: node dependencies + artifacts: true + rules: *test-release-rules + before_script: *nix-before + script: + - xzcat node-dependencies.nar.xz | nix-store --import + - nix -L run ".#jqChangelogJson" -- -r '.versions[0].version' > .current-version + - nix -L run ".#jqChangelogJson" -- -r '.versions[0].body' > .current-changelog.md - echo "VERSION=$(cat .current-version)" >> build.env artifacts: reports: @@ -291,6 +332,33 @@ upload container: artifacts: false rules: *release-rules retry: 2 +upload test container: + variables: + GIT_STRATEGY: none + stage: release + image: quay.io/skopeo/stable:latest + script: + - skopeo --insecure-policy copy --dest-creds "${CI_REGISTRY_USER}:${CI_JOB_TOKEN}" docker-archive://$(pwd)/uniworx.tar.gz docker://${CI_REGISTRY}/fradrive/fradrive/test:${CI_COMMIT_REF_NAME} + - skopeo --insecure-policy copy --src-creds "${CI_REGISTRY_USER}:${CI_JOB_TOKEN}" --dest-creds "${CI_REGISTRY_USER}:${CI_JOB_TOKEN}" docker://${CI_REGISTRY}/fradrive/fradrive/test:${CI_COMMIT_REF_NAME} docker://${CI_REGISTRY}/fradrive/fradrive/test:latest + needs: + - job: node dependencies # transitive + artifacts: false + - job: well known # transitive + artifacts: false + - job: frontend # tranitive + artifacts: false + - job: uniworx:lib:uniworx # transitive + artifacts: false + - job: uniworx:exe:uniworx # transitive + artifacts: false + - job: test container + artifacts: true + - job: parse test changelog + artifacts: true + - job: check # sanity + artifacts: false + rules: *test-release-rules + retry: 2 release: variables: @@ -309,3 +377,20 @@ release: artifacts: false - job: parse changelog artifacts: true +test release: + variables: + GIT_STRATEGY: none + stage: release + image: registry.gitlab.com/gitlab-org/release-cli:latest + rules: *test-release-rules + script: + - echo "Will create test release ${VERSION}-test..." + release: + name: "${VERSION}-test" + tag_name: '$CI_COMMIT_TAG' + description: .current-changelog.md + needs: + - job: check # sanity + artifacts: false + - job: parse test changelog + artifacts: true diff --git a/.gitlab-ci/construct-flake-url.sh b/.gitlab-ci/construct-flake-url.sh deleted file mode 100755 index 18802d34c..000000000 --- a/.gitlab-ci/construct-flake-url.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash - -# SPDX-FileCopyrightText: 2022 Gregor Kleen -# -# SPDX-License-Identifier: AGPL-3.0-or-later - -if [ -n "${CI_COMMIT_TAG}" ]; then - ref="refs/tags/${CI_COMMIT_TAG}" -else - ref="refs/heads/${CI_COMMIT_BRANCH}" -fi -export FLAKE="git+${CI_REPOSITORY_URL}?rev=${CI_COMMIT_SHA}&ref=${ref}" diff --git a/flake.lock.license b/flake.lock.license index 0544bf968..b866d6d53 100644 --- a/flake.lock.license +++ b/flake.lock.license @@ -1,3 +1,3 @@ -SPDX-FileCopyrightText: 2022 Gregor Kleen +SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/flake.nix b/flake.nix index 6c5489232..663a99ec2 100644 --- a/flake.nix +++ b/flake.nix @@ -127,7 +127,7 @@ inherit (pkgs.lib) recursiveUpdate; in { packages = haskellFlake.packages // { - inherit (pkgs) uniworxNodeDependencies uniworxWellKnown uniworxFrontend uniworxDemoDocker uniworxDocker changelogJson; + inherit (pkgs) uniworxNodeDependencies uniworxWellKnown uniworxFrontend uniworxTestDocker uniworxDocker changelogJson; }; apps = haskellFlake.apps // { diff --git a/is-clean.sh b/is-clean.sh index a13382f2b..b50600b68 100755 --- a/is-clean.sh +++ b/is-clean.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# SPDX-FileCopyrightText: 2022 Gregor Kleen +# SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -13,15 +13,17 @@ if [ -n "$(git status --porcelain)" ]; then exit 1 fi -if [ "$(git rev-parse --abbrev-ref HEAD)" != "master" ]; then - echo "Not on master" >&2 +branch="$(git rev-parse --abbrev-ref HEAD)" + +if [[ $branch != "master" && $branch != "test" ]]; then + echo "Not on master or test" >&2 exit 1 fi ourHash=$(git rev-parse HEAD) -theirHash=$(git ls-remote origin -h refs/heads/master | awk '{ print $1; }') +theirHash=$(git ls-remote origin -h refs/heads/$branch | awk '{ print $1; }') if [ "$theirHash" != "$ourHash" ]; then - echo "Local HEAD is not up to date with remote master" >&2 + echo "Local HEAD is not up to date with remote $branch" >&2 exit 1 fi diff --git a/nix/docker/default.nix b/nix/docker/default.nix index e488b1b3a..98ec639da 100644 --- a/nix/docker/default.nix +++ b/nix/docker/default.nix @@ -1,4 +1,4 @@ -# SPDX-FileCopyrightText: 2022-2023 Gregor Kleen , Sarah Vaupel , Steffen Jost +# SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen , Steffen Jost # # SPDX-License-Identifier: AGPL-3.0-or-later @@ -14,11 +14,11 @@ let ''); in if self ? lastModified then fromDate else "1970-01-01T00:00:01Z"; - mkUniworxDocker = { isDemo }: prev.dockerTools.buildImage { - name = "uniworx${optionalString isDemo "-demo"}"; + mkUniworxDocker = { isTest }: prev.dockerTools.buildImage { + name = "uniworx${optionalString isTest "-test"}"; tag = let - versionFile = if isDemo then ./demo-version.json else ./version.json; + versionFile = if isTest then ./test-version.json else ./version.json; in (builtins.fromJSON (prev.lib.readFile versionFile)).version; inherit created; @@ -44,7 +44,7 @@ let curl wget netcat openldap unixtools.netstat htop gnugrep locale - ] ++ optionals isDemo [ postgresql_12 memcached uniworx.uniworx.components.exes.uniworxdb ]; + ]; runAsRoot = '' #!${final.stdenv.shell} @@ -62,18 +62,6 @@ let # just to see how to create directories here mkdir -p /testdir - - ${optionalString isDemo '' - install -d -g uniworx -o uniworx -m 0750 /var/lib/postgres - - install -d -g uniworx -o uniworx -m 0750 /var/lib/memcached - - install -d -g uniworx -o uniworx -m 0755 /var/log/postgres - install -d -g uniworx -o uniworx -m 0755 /var/log/memcached - - mkdir -p /run - install -d -g uniworx -o uniworx -m 0755 /run/postgres - ''} ''; config = @@ -83,27 +71,6 @@ let cTime=$(date -Is) - ${optionalString isDemo '' - pgDir=/var/lib/postgres - pgSockDir=/run/postgres - pgLogFile=/var/log/postgres/''${cTime}.log - export PGHOST=''${pgSockDir} - export PGLOG=''${pgLogFile} - - pgNew= - if [[ -n "$(find ''${pgDir} -maxdepth 0 -type d -empty 2>/dev/null)" ]]; then - pgNew=1 - fi - - [[ -z "''${pgNew}" ]] || initdb --no-locale --encoding=UTF8 --username postgres --pgdata ''${pgDir} - pg_ctl start -D ''${pgDir} -l ''${pgLogFile} -w -o "-k ''${pgSockDir} -c listen_addresses= -c hba_file=${postgresHba} -c unix_socket_permissions=0777 -c max_connections=9990 -c shared_preload_libraries=pg_stat_statements -c auto_explain.log_min_duration=100ms" - [[ -z "''${pgNew}" ]] || psql -f ${postgresSchema} postgres postgres - - ( cd /var/lib/memcached; memcached -p 11212 ) &>/var/log/memcached/''${cTime}.log & - export SESSION_MEMCACHED_HOST=localhost - export SESSION_MEMCACHED_PORT=11212 - ''} - # export LOGDEST=/var/log/uniworx/''${cTime}.log # kubernetes prefers log via stdout typeset -a configs configs=() @@ -115,9 +82,6 @@ let fi configs+=('${uniworxConfig}') cd /var/lib/uniworx - ${optionalString isDemo '' - [[ -z "''${pgNew}" ]] || uniworxdb -f ''${configs} - ''} exec -- uniworx ''${configs} ''; postgresSchema = prev.writeText "schema.sql" '' @@ -142,13 +106,11 @@ let Volumes = { "/var/lib/uniworx" = {}; "/var/log" = {}; - } // optionalAttrs isDemo { - "/var/lib/postgres" = {}; }; }; }; in mapAttrs (_name: mkUniworxDocker) { - uniworxDemoDocker = { isDemo = true; }; - uniworxDocker = { isDemo = false; }; + uniworxTestDocker = { isTest = true; }; + uniworxDocker = { isTest = false; }; } diff --git a/nix/docker/demo-version.json.license b/nix/docker/demo-version.json.license deleted file mode 100644 index a0992def9..000000000 --- a/nix/docker/demo-version.json.license +++ /dev/null @@ -1,3 +0,0 @@ -SPDX-FileCopyrightText: 2022 Gregor Kleen ,Steffen Jost - -SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/nix/docker/demo-version.json b/nix/docker/test-version.json similarity index 100% rename from nix/docker/demo-version.json rename to nix/docker/test-version.json diff --git a/nix/docker/test-version.json.license b/nix/docker/test-version.json.license new file mode 100644 index 000000000..3526b90ae --- /dev/null +++ b/nix/docker/test-version.json.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen , Steffen Jost + +SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/nix/frontend/node-env.nix.license b/nix/frontend/node-env.nix.license new file mode 100644 index 000000000..0f1e095e5 --- /dev/null +++ b/nix/frontend/node-env.nix.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen + +SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/nix/frontend/node-packages.nix.license b/nix/frontend/node-packages.nix.license new file mode 100644 index 000000000..0f1e095e5 --- /dev/null +++ b/nix/frontend/node-packages.nix.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Gregor Kleen + +SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/package.json b/package.json index 3a6f218ee..598fd4194 100644 --- a/package.json +++ b/package.json @@ -23,9 +23,9 @@ "frontend:build": "webpack --progress", "frontend:build:watch": "webpack --watch --progress", "i18n:test": "./missing-translations.sh", - "prerelease": "npm run test", - "release": "standard-version -a", - "postrelease": "git push --follow-tags origin master", + "prerelease": "./is-clean.sh && npm run test", + "release": "./release.sh", + "postrelease": "git push --follow-tags", "parse-changelog": "changelog-parser ./CHANGELOG.md > changelog.json" }, "husky": { diff --git a/package.json.license b/package.json.license index 2c711af0d..e71eda12d 100644 --- a/package.json.license +++ b/package.json.license @@ -1,3 +1,3 @@ -SPDX-FileCopyrightText: 2022 Felix Hamann ,Gregor Kleen ,Sarah Vaupel ,Steffen Jost +SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Felix Hamann , Gregor Kleen , Steffen Jost SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/release.sh b/release.sh new file mode 100755 index 000000000..80b2f17f0 --- /dev/null +++ b/release.sh @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# SPDX-FileCopyrightText: 2023 Sarah Vaupel +# +# SPDX-License-Identifier: AGPL-3.0-or-later + +set -e + +case "$(git rev-parse --abbrev-ref HEAD)" in + "master" | "main") + standard-version -a + ;; + "test") + standard-version -a -t t + ;; + *) + echo "Current branch not supported for release!" + exit 1 + ;; +esac diff --git a/resources/FAG_UKM-MI_Pictogram-Library-Manual_RZ.pdf.license b/resources/FAG_UKM-MI_Pictogram-Library-Manual_RZ.pdf.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/resources/FAG_UKM-MI_Pictogram-Library-Manual_RZ.pdf.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/resources/FraportIcons.zip.license b/resources/FraportIcons.zip.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/resources/FraportIcons.zip.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/resources/fraport_icons_übersicht_2018-11-15.pdf.license b/resources/fraport_icons_übersicht_2018-11-15.pdf.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/resources/fraport_icons_übersicht_2018-11-15.pdf.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/src/Model/Types/Lms.hs b/src/Model/Types/Lms.hs index 85483197b..b965fecd8 100644 --- a/src/Model/Types/Lms.hs +++ b/src/Model/Types/Lms.hs @@ -1,3 +1,4 @@ +-- SPDX-FileCopyrightText: 2022-2023 Sarah Vaupel , Steffen Jost -- -- SPDX-License-Identifier: AGPL-3.0-or-later diff --git a/templates/letter/din5008with_pin.latex.license b/templates/letter/din5008with_pin.latex.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/din5008with_pin.latex.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/templates/letter/fraport_f_expiry.md.license b/templates/letter/fraport_f_expiry.md.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/fraport_f_expiry.md.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/templates/letter/fraport_generic_expiry.md.license b/templates/letter/fraport_generic_expiry.md.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/fraport_generic_expiry.md.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/templates/letter/fraport_qualification.md.license b/templates/letter/fraport_qualification.md.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/fraport_qualification.md.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/templates/letter/generic_template.html.license b/templates/letter/generic_template.html.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/generic_template.html.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design diff --git a/templates/letter/plain_article.latex.license b/templates/letter/plain_article.latex.license new file mode 100644 index 000000000..a13e9edc2 --- /dev/null +++ b/templates/letter/plain_article.latex.license @@ -0,0 +1,3 @@ +SPDX-FileCopyrightText: 2023 Steffen Jost + +SPDX-License-Identifier: LicenseRef-Fraport-Corporate-Design