diff --git a/README.md b/README.md index df17bea..7bce676 100644 --- a/README.md +++ b/README.md @@ -412,7 +412,7 @@ gitea: ``` This would mount the two additional volumes (`oauth` and `some-additionals`) from different sources to the init container where the _app.ini_ gets updated. -All files mounted that way will be read and converted to environment variables and then added to the _app.ini_ using [environment-to-ini](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini). +All files mounted that way will be read and converted to environment variables and then added to the _app.ini_ using [Gitea config edit-ini](https://docs.gitea.com/administration/config-cheat-sheet#use-environment-variables-to-setup-gitea). The key of such additional source represents the section inside the _app.ini_. The value for each key can be multiline ini-like definitions. @@ -453,10 +453,10 @@ Users are able to define their own environment variables, which are loaded into We also support to directly interact with the generated _app.ini_. To inject self defined variables into the _app.ini_ a certain format needs to be honored. -This is described in detail on the [env-to-ini](https://github.com/go-gitea/gitea/tree/main/contrib/environment-to-ini) page. +This is described in detail on the [Gitea config edit-ini](https://docs.gitea.com/administration/config-cheat-sheet#use-environment-variables-to-setup-gitea) page. Prior to Gitea 1.20 and Chart 9.0.0 the helm chart had a custom prefix `ENV_TO_INI`. -After the support for a custom prefix was removed in Gite core, the prefix was changed to `GITEA`. +After the support for a custom prefix was removed in Gitea core, the prefix was changed to `GITEA`. For example a database setting needs to have the following format: @@ -1577,7 +1577,7 @@ mariadb: ### App.ini generation -The app.ini generation has changed and now utilizes the environment-to-ini script provided by newer Gitea versions. +The app.ini generation has changed and now uses the `gitea config edit-ini` subcommand introduced in Gitea 1.26. This change ensures, that the app.ini is now persistent. ### Secret Key generation diff --git a/package-lock.json b/package-lock.json index 843cc82..c3f4311 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1226,6 +1226,7 @@ "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, "license": "MIT", + "peer": true, "engines": { "node": ">=12" }, diff --git a/scripts/init-containers/config/config_environment.sh b/scripts/init-containers/config/config_environment.sh index ed00ea6..3e58d39 100755 --- a/scripts/init-containers/config/config_environment.sh +++ b/scripts/init-containers/config/config_environment.sh @@ -78,7 +78,6 @@ function env2ini::reload_preset_envs() { rm $TMP_EXISTING_ENVS_FILE } - function env2ini::process_config_file() { local config_file="${1}" local section="$(basename "${config_file}")" @@ -151,4 +150,4 @@ if [ -f ${GITEA_APP_INI} ]; then unset GITEA__SERVER__LFS_JWT_SECRET fi -environment-to-ini -o $GITEA_APP_INI +gitea config edit-ini --apply-env --config "$GITEA_APP_INI" --out "$GITEA_APP_INI" diff --git a/unittests/bash/tests/init-containers/config/config_environment.bats b/unittests/bash/tests/init-containers/config/config_environment.bats index 62364a6..fc1a84c 100644 --- a/unittests/bash/tests/init-containers/config/config_environment.bats +++ b/unittests/bash/tests/init-containers/config/config_environment.bats @@ -9,27 +9,51 @@ function setup() { export GITEA_APP_INI="$BATS_TEST_TMPDIR/app.ini" export TMP_EXISTING_ENVS_FILE="$BATS_TEST_TMPDIR/existing-envs" export ENV_TO_INI_MOUNT_POINT="$BATS_TEST_TMPDIR/env-to-ini-mounts" + export GITEA_EDIT_INI_EXPECTED=0 + export PATH="$BATS_TEST_TMPDIR/bin:$PATH" - stub gitea \ - "generate secret INTERNAL_TOKEN : echo 'mocked-internal-token'" \ - "generate secret SECRET_KEY : echo 'mocked-secret-key'" \ - "generate secret JWT_SECRET : echo 'mocked-jwt-secret'" \ - "generate secret LFS_JWT_SECRET : echo 'mocked-lfs-jwt-secret'" + mkdir -p "$BATS_TEST_TMPDIR/bin" + cat >"$BATS_TEST_TMPDIR/bin/gitea" <<'EOF' +#!/usr/bin/env bash +set -euo pipefail + +case "$*" in + 'generate secret INTERNAL_TOKEN') + echo 'mocked-internal-token' + ;; + 'generate secret SECRET_KEY') + echo 'mocked-secret-key' + ;; + 'generate secret JWT_SECRET') + echo 'mocked-jwt-secret' + ;; + 'generate secret LFS_JWT_SECRET') + echo 'mocked-lfs-jwt-secret' + ;; + "config edit-ini --apply-env --config $GITEA_APP_INI --out $GITEA_APP_INI") + if [ "$GITEA_EDIT_INI_EXPECTED" -eq 1 ]; then + echo 'Stubbed gitea config edit-ini was called!' + exit 0 + fi + + echo 'Unexpected gitea config edit-ini invocation' >&2 + exit 127 + ;; + *) + echo "Unexpected gitea invocation: $*" >&2 + exit 127 + ;; +esac +EOF + chmod +x "$BATS_TEST_TMPDIR/bin/gitea" } function teardown() { - unstub gitea - # This condition exists due to https://github.com/jasonkarns/bats-mock/pull/37 being still open - if [ $ENV_TO_INI_EXPECTED -eq 1 ]; then - unstub environment-to-ini - fi + : } -# This function exists due to https://github.com/jasonkarns/bats-mock/pull/37 being still open -function expect_environment_to_ini_call() { - export ENV_TO_INI_EXPECTED=1 - stub environment-to-ini \ - "-o $GITEA_APP_INI : echo 'Stubbed environment-to-ini was called!'" +function expect_gitea_config_edit_ini_call() { + export GITEA_EDIT_INI_EXPECTED=1 } function execute_test_script() { @@ -56,18 +80,18 @@ function write_mounted_file() { } @test "works as expected when nothing is configured" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call run $PROJECT_ROOT/scripts/init-containers/config/config_environment.sh assert_success assert_line '...Initial secrets generated' assert_line 'Reloading preset envs...' assert_line '=== All configuration sources loaded ===' - assert_line 'Stubbed environment-to-ini was called!' + assert_line 'Stubbed gitea config edit-ini was called!' } @test "exports initial secrets" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call run execute_test_script assert_success @@ -78,7 +102,7 @@ function write_mounted_file() { } @test "does NOT export initial secrets when app.ini already exists" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call touch $GITEA_APP_INI run execute_test_script @@ -92,7 +116,7 @@ function write_mounted_file() { } @test "ensures that preset environment variables take precedence over auto-generated ones" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call export GITEA__OAUTH2__JWT_SECRET="pre-defined-jwt-secret" run execute_test_script @@ -102,7 +126,7 @@ function write_mounted_file() { } @test "ensures that preset environment variables take precedence over mounted ones" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call export GITEA__OAUTH2__JWT_SECRET="pre-defined-jwt-secret" write_mounted_file "inlines" "oauth2" "$(cat << EOF JWT_SECRET=inline-jwt-secret @@ -117,7 +141,7 @@ EOF } @test "ensures that additionals take precedence over inlines" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call write_mounted_file "inlines" "oauth2" "$(cat << EOF JWT_SECRET=inline-jwt-secret EOF @@ -136,7 +160,7 @@ EOF } @test "ensures that dotted/dashed sections are properly masked" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call write_mounted_file "inlines" "repository.pull-request" "$(cat << EOF WORK_IN_PROGRESS_PREFIXES=WIP:,[WIP] EOF @@ -152,7 +176,7 @@ EOF ##### THIS IS A BUG, BUT I WANT IT TO BE COVERED BY TESTS ##### ############################################################### @test "ensures uppercase section and setting names (🐞)" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call export GITEA__oauth2__JwT_Secret="pre-defined-jwt-secret" write_mounted_file "inlines" "repository.pull-request" "$(cat << EOF WORK_IN_progress_PREFIXES=WIP:,[WIP] @@ -167,7 +191,7 @@ EOF } @test "treats top-level configuration as section-less" { - expect_environment_to_ini_call + expect_gitea_config_edit_ini_call write_mounted_file "inlines" "_generals_" "$(cat << EOF APP_NAME=Hello top-level configuration RUN_MODE=dev diff --git a/unittests/helm/config/config-environment-script.yaml b/unittests/helm/config/config-environment-script.yaml new file mode 100644 index 0000000..dbceb85 --- /dev/null +++ b/unittests/helm/config/config-environment-script.yaml @@ -0,0 +1,14 @@ +suite: config template | config_environment.sh +release: + name: gitea-unittests + namespace: testing +templates: + - templates/gitea/config.yaml +tests: + - it: uses `gitea config edit-ini` to write app.ini from environment variables + template: templates/gitea/config.yaml + asserts: + - documentIndex: 1 + matchRegex: + path: stringData["config_environment.sh"] + pattern: 'gitea config edit-ini --apply-env --config .+GITEA_APP_INI.+ --out .+GITEA_APP_INI'