fix(coverage): Integration tests don't run with coverage (#12978)

### Documentation

- [ ] I created a pull request [to the documentation](https://codeberg.org/forgejo/docs) to explain to Forgejo users how to use this change.
- [x] I did not document these changes and I do not expect someone else to do it.

### Release notes

- [ ] This change will be noticed by a Forgejo user or admin (feature, bug fix, performance, etc.). I suggest to include a release note for this change.
- [x] This change is not visible to a Forgejo user or admin (refactor, dependency upgrade, etc.). I think there is no need to add a release note for this change.

Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/12978
Reviewed-by: limiting-factor <limiting-factor@noreply.codeberg.org>
Reviewed-by: Mathieu Fenniak <mfenniak@noreply.codeberg.org>
This commit is contained in:
Clouds 2026-06-13 23:25:38 +02:00 committed by Mathieu Fenniak
commit 519e868338
13 changed files with 72 additions and 51 deletions

View file

@ -59,7 +59,7 @@ jobs:
options: --tmpfs /bitnami/postgresql
cacher:
image: registry.redict.io/redict:7.3.6-scratch
options: --tmpfs /data:noatime
options: --tmpfs /data:noatime,uid=1000,gid=1000
steps:
- uses: https://data.forgejo.org/actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
with:

View file

@ -652,7 +652,9 @@ $(GO_LICENSE_FILE): go.mod go.sum
@rm -rf $(GO_LICENSE_TMP_DIR)
generate-ini-sqlite:
sed -e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
sed \
-e 's|{{REPO_TEST_DIR}}|$(or $(REPO_TEST_DIR),$(CURDIR)/)|g' \
-e 's|{{PROJECT_ROOT}}|$(CURDIR)|g' \
-e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
-e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
tests/sqlite.ini.tmpl > tests/sqlite.ini
@ -669,11 +671,13 @@ test-sqlite\#%: integrations.sqlite.test generate-ini-sqlite
test-sqlite-migration: migrations.sqlite.test migrations.individual.sqlite.test
generate-ini-mysql:
sed -e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \
sed \
-e 's|{{TEST_MYSQL_HOST}}|${TEST_MYSQL_HOST}|g' \
-e 's|{{TEST_MYSQL_DBNAME}}|${TEST_MYSQL_DBNAME}|g' \
-e 's|{{TEST_MYSQL_USERNAME}}|${TEST_MYSQL_USERNAME}|g' \
-e 's|{{TEST_MYSQL_PASSWORD}}|${TEST_MYSQL_PASSWORD}|g' \
-e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
-e 's|{{REPO_TEST_DIR}}|$(or $(REPO_TEST_DIR),$(CURDIR)/)|g' \
-e 's|{{PROJECT_ROOT}}|$(CURDIR)|g' \
-e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
-e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
tests/mysql.ini.tmpl > tests/mysql.ini
@ -690,12 +694,14 @@ test-mysql\#%: integrations.mysql.test generate-ini-mysql
test-mysql-migration: migrations.mysql.test migrations.individual.mysql.test
generate-ini-pgsql:
sed -e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \
sed \
-e 's|{{TEST_PGSQL_HOST}}|${TEST_PGSQL_HOST}|g' \
-e 's|{{TEST_PGSQL_DBNAME}}|${TEST_PGSQL_DBNAME}|g' \
-e 's|{{TEST_PGSQL_USERNAME}}|${TEST_PGSQL_USERNAME}|g' \
-e 's|{{TEST_PGSQL_PASSWORD}}|${TEST_PGSQL_PASSWORD}|g' \
-e 's|{{TEST_PGSQL_SCHEMA}}|${TEST_PGSQL_SCHEMA}|g' \
-e 's|{{REPO_TEST_DIR}}|${REPO_TEST_DIR}|g' \
-e 's|{{REPO_TEST_DIR}}|$(or $(REPO_TEST_DIR),$(CURDIR)/)|g' \
-e 's|{{PROJECT_ROOT}}|$(CURDIR)|g' \
-e 's|{{TEST_LOGGER}}|$(or $(TEST_LOGGER),test$(COMMA)file)|g' \
-e 's|{{TEST_TYPE}}|$(or $(TEST_TYPE),integration)|g' \
-e 's|{{TEST_STORAGE_TYPE}}|$(or $(TEST_STORAGE_TYPE),minio)|g' \

View file

@ -8,8 +8,9 @@ PS4='${BASH_SOURCE[0]}:$LINENO: ${FUNCNAME[0]}: '
# Those must be explicitly required and are excluded from the full list of packages because they
# would interfere with the testing fixtures.
#
excluded+='forgejo.org/models/gitea_migrations|' # must be run before database specific tests
excluded+='forgejo.org/models/forgejo_migrations_legacy|' # must be run before database specific tests
excluded+='forgejo.org/models/gitea_migrations|' # must be run before database specific tests
excluded+='forgejo.org/models/forgejo_migrations|' # must be run before database specific tests
excluded+='forgejo.org/models/forgejo_migrations_legacy|' # must be run before database specific tests
excluded+='forgejo.org/tests/integration/migration-test|' # must be run before database specific tests
excluded+='forgejo.org/tests|' # only tests, no coverage to get there
excluded+='forgejo.org/tests/e2e|' # JavaScript is not in scope here and if it adds coverage it should not be counted
@ -38,7 +39,9 @@ function run_test() {
# -race cannot be used because it requires -covermode atomic which is
# different from the end-to-end tests and would cause issues wen merging
#
$GO test -timeout=20m -tags='sqlite sqlite_unlock_notify' -cover $package -coverpkg $COVERED_PACKAGES $COVERAGE_TEST_ARGS -args -test.gocoverdir=$coverage |& grep -v 'warning: no packages being tested depend on matches for pattern'
set -o pipefail
$GO test -timeout=40m -tags='sqlite sqlite_unlock_notify' -cover $package -coverpkg $COVERED_PACKAGES $COVERAGE_TEST_ARGS -args -test.gocoverdir=$coverage |& grep -v 'warning: no packages being tested depend on matches for pattern'
set +o pipefail
}
function test_packages() {

View file

@ -307,6 +307,7 @@ func PrepareTestDatabase() error {
func PrepareTestEnv(t testing.TB) {
require.NoError(t, PrepareTestDatabase())
require.NoError(t, util.RemoveAll(setting.RepoRootPath))
giteaRoot = base.SetupGiteaRoot() // Makes sure GITEA_ROOT is set
metaPath := filepath.Join(giteaRoot, "tests", "gitea-repositories-meta")
require.NoError(t, CopyDir(metaPath, setting.RepoRootPath))
ownerDirs, err := os.ReadDir(setting.RepoRootPath)
@ -324,6 +325,4 @@ func PrepareTestEnv(t testing.TB) {
_ = os.MkdirAll(filepath.Join(setting.RepoRootPath, ownerDir.Name(), repoDir.Name(), "refs", "tag"), 0o755)
}
}
base.SetupGiteaRoot() // Makes sure GITEA_ROOT is set
}

View file

@ -7,9 +7,11 @@ import (
"encoding/base64"
"net/http"
"os"
"path"
"testing"
auth_model "forgejo.org/models/auth"
"forgejo.org/modules/setting"
api "forgejo.org/modules/structs"
"forgejo.org/tests"
@ -25,7 +27,7 @@ func TestAPIUpdateOrgAvatar(t *testing.T) {
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteOrganization)
// Test what happens if you use a valid image
avatar, err := os.ReadFile("tests/integration/avatar.png")
avatar, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/avatar.png"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open avatar.png")
@ -49,7 +51,7 @@ func TestAPIUpdateOrgAvatar(t *testing.T) {
MakeRequest(t, req, http.StatusBadRequest)
// Test what happens if you use a file that is not an image
text, err := os.ReadFile("tests/integration/README.md")
text, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/README.md"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open README.md")

View file

@ -8,12 +8,14 @@ import (
"fmt"
"net/http"
"os"
"path"
"testing"
auth_model "forgejo.org/models/auth"
repo_model "forgejo.org/models/repo"
"forgejo.org/models/unittest"
user_model "forgejo.org/models/user"
"forgejo.org/modules/setting"
api "forgejo.org/modules/structs"
"forgejo.org/tests"
@ -29,7 +31,7 @@ func TestAPIUpdateRepoAvatar(t *testing.T) {
token := getUserToken(t, user2.LowerName, auth_model.AccessTokenScopeWriteRepository)
// Test what happens if you use a valid image
avatar, err := os.ReadFile("tests/integration/avatar.png")
avatar, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/avatar.png"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open avatar.png")
@ -53,7 +55,7 @@ func TestAPIUpdateRepoAvatar(t *testing.T) {
MakeRequest(t, req, http.StatusBadRequest)
// Test what happens if you use a file that is not an image
text, err := os.ReadFile("tests/integration/README.md")
text, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/README.md"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open README.md")

View file

@ -7,9 +7,11 @@ import (
"encoding/base64"
"net/http"
"os"
"path"
"testing"
auth_model "forgejo.org/models/auth"
"forgejo.org/modules/setting"
api "forgejo.org/modules/structs"
"forgejo.org/tests"
@ -25,7 +27,7 @@ func TestAPIUpdateUserAvatar(t *testing.T) {
token := getTokenForLoggedInUser(t, session, auth_model.AccessTokenScopeWriteUser)
// Test what happens if you use a valid image
avatar, err := os.ReadFile("tests/integration/avatar.png")
avatar, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/avatar.png"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open avatar.png")
@ -49,7 +51,7 @@ func TestAPIUpdateUserAvatar(t *testing.T) {
MakeRequest(t, req, http.StatusBadRequest)
// Test what happens if you use a file that is not an image
text, err := os.ReadFile("tests/integration/README.md")
text, err := os.ReadFile(path.Join(setting.AppWorkPath, "tests/integration/README.md"))
require.NoError(t, err)
if err != nil {
assert.FailNow(t, "Unable to open README.md")

View file

@ -52,6 +52,7 @@ func initMigrationTest(t *testing.T) func() {
deferFn := tests.PrintCurrentTest(t, 2)
root := getRoot(t)
setting.AppPath = path.Join(root, "migration-test-should-not-need-a-binary") // use RunMainAppWithStdin if a binary is needed
setting.AppWorkPath = root
giteaConf := os.Getenv("GITEA_CONF")
if giteaConf == "" {

View file

@ -9,7 +9,7 @@ import (
"fmt"
"net/url"
"os"
"path/filepath"
"path"
"testing"
auth_model "forgejo.org/models/auth"
@ -44,13 +44,14 @@ func TestInstanceSigning(t *testing.T) {
t.Run("SSH", func(t *testing.T) {
defer tests.PrintCurrentTest(t)()
pubKeyContent, err := os.ReadFile("tests/integration/ssh-signing-key.pub")
signingKeyPath := path.Join(setting.AppWorkPath, "tests/integration/ssh-signing-key")
pubKeyPath := signingKeyPath + ".pub"
pubKeyContent, err := os.ReadFile(pubKeyPath)
require.NoError(t, err)
pubKey, _, _, _, err := ssh.ParseAuthorizedKey(pubKeyContent)
require.NoError(t, err)
signingKeyPath, err := filepath.Abs("tests/integration/ssh-signing-key")
require.NoError(t, err)
require.NoError(t, os.Chmod(signingKeyPath, 0o600))
defer test.MockVariableValue(&setting.SSHInstanceKey, pubKey)()
defer test.MockVariableValue(&setting.Repository.Signing.Format, "ssh")()
@ -438,10 +439,11 @@ func crudActionCreateFile(_ *testing.T, ctx APITestContext, user *user_model.Use
}
func importTestingKey() (*openpgp.Entity, error) {
if _, _, err := process.GetManager().Exec("gpg --import tests/integration/private-testing.key", "gpg", "--import", "tests/integration/private-testing.key"); err != nil {
keyringFilePath := path.Join(setting.AppWorkPath, "tests/integration/private-testing.key")
if _, _, err := process.GetManager().Exec("gpg --import "+keyringFilePath, "gpg", "--import", keyringFilePath); err != nil {
return nil, err
}
keyringFile, err := os.Open("tests/integration/private-testing.key")
keyringFile, err := os.Open(keyringFilePath)
if err != nil {
return nil, err
}

View file

@ -12,11 +12,11 @@ SSL_MODE = disable
[indexer]
REPO_INDEXER_ENABLED = true
REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve
REPO_INDEXER_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/repos.bleve
[queue.issue_indexer]
TYPE = level
DATADIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue
DATADIR = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/indexers/issues.queue
[queue.stats_recalc] # override below default of `immediate` to avoid locking issues
TYPE = channel
@ -28,10 +28,10 @@ TYPE = immediate
ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/gitea-repositories
[repository.local]
LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/local-repo
LOCAL_COPY_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/local-repo
[repository.upload]
TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/uploads
TEMP_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/tmp/uploads
[repository.signing]
SIGNING_KEY = none
@ -43,7 +43,7 @@ ROOT_URL = http://localhost:3001/
DISABLE_SSH = false
SSH_LISTEN_HOST = localhost
SSH_PORT = 2201
APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data
APP_DATA_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data
BUILTIN_SSH_SERVER_USER = git
START_SSH_SERVER = true
OFFLINE_MODE = false
@ -74,7 +74,7 @@ ENABLE_FEDERATED_AVATAR = false
[session]
PROVIDER = file
PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data/sessions
PROVIDER_CONFIG = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data/sessions
[log]
MODE = {{TEST_LOGGER}}
@ -98,7 +98,7 @@ INTERNAL_TOKEN = eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJuYmYiOjE0OTU1NTE2MTh9.h
DISABLE_QUERY_AUTH_TOKEN = true
[lfs]
PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data/lfs
PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-mysql/data/lfs
[packages]
ENABLED = true

View file

@ -13,11 +13,11 @@ SSL_MODE = disable
[indexer]
REPO_INDEXER_ENABLED = true
REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve
REPO_INDEXER_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/repos.bleve
[queue.issue_indexer]
TYPE = level
DATADIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue
DATADIR = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/indexers/issues.queue
[queue.stats_recalc] # override below default of `immediate` to avoid locking issues
TYPE = channel
@ -29,10 +29,10 @@ TYPE = immediate
ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/gitea-repositories
[repository.local]
LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/local-repo
LOCAL_COPY_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/local-repo
[repository.upload]
TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/uploads
TEMP_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/tmp/uploads
[repository.signing]
SIGNING_KEY = none
@ -48,12 +48,12 @@ START_SSH_SERVER = true
LFS_START_SERVER = true
OFFLINE_MODE = false
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data
APP_DATA_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data
BUILTIN_SSH_SERVER_USER = git
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
[attachment]
PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/attachments
PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/attachments
[mailer]
ENABLED = true
@ -74,12 +74,12 @@ ENABLE_NOTIFY_MAIL = true
[picture]
DISABLE_GRAVATAR = false
ENABLE_FEDERATED_AVATAR = false
AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/repo-avatars
AVATAR_UPLOAD_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/repo-avatars
[session]
PROVIDER = file
PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/sessions
PROVIDER_CONFIG = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-pgsql/data/sessions
[log]
MODE = {{TEST_LOGGER}}

View file

@ -4,16 +4,16 @@ RUN_MODE = prod
[database]
DB_TYPE = sqlite3
PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea.db
PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea.db
SQLITE_JOURNAL_MODE = MEMORY
[indexer]
REPO_INDEXER_ENABLED = true
REPO_INDEXER_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve
REPO_INDEXER_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/repos.bleve
[queue.issue_indexer]
TYPE = level
DATADIR = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue
DATADIR = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/indexers/issues.queue
[queue.stats_recalc] # override below default of `immediate` to avoid locking issues
TYPE = channel
@ -25,10 +25,10 @@ TYPE = immediate
ROOT = {{REPO_TEST_DIR}}tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/gitea-repositories
[repository.local]
LOCAL_COPY_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/local-repo
LOCAL_COPY_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/local-repo
[repository.upload]
TEMP_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/uploads
TEMP_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/tmp/uploads
[repository.signing]
SIGNING_KEY = none
@ -44,13 +44,13 @@ START_SSH_SERVER = true
LFS_START_SERVER = true
OFFLINE_MODE = false
LFS_JWT_SECRET = Tv_MjmZuHqpIY6GFl12ebgkRAMt4RlWt0v4EHKSXO0w
APP_DATA_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data
APP_DATA_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data
ENABLE_GZIP = true
BUILTIN_SSH_SERVER_USER = git
SSH_TRUSTED_USER_CA_KEYS = ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCb4DC1dMFnJ6pXWo7GMxTchtzmJHYzfN6sZ9FAPFR4ijMLfGki+olvOMO5Fql1/yGnGfbELQa1S6y4shSvj/5K+zUFScmEXYf3Gcr87RqilLkyk16RS+cHNB1u87xTHbETaa3nyCJeGQRpd4IQ4NKob745mwDZ7jQBH8AZEng50Oh8y8fi8skBBBzaYp1ilgvzG740L7uex6fHV62myq0SXeCa+oJUjq326FU8y+Vsa32H8A3e7tOgXZPdt2TVNltx2S9H2WO8RMi7LfaSwARNfy1zu+bfR50r6ef8Yx5YKCMz4wWb1SHU1GS800mjOjlInLQORYRNMlSwR1+vLlVDciOqFapDSbj+YOVOawR0R1aqlSKpZkt33DuOBPx9qe6CVnIi7Z+Px/KqM+OLCzlLY/RS+LbxQpDWcfTVRiP+S5qRTcE3M3UioN/e0BE/1+MpX90IGpvVkA63ILYbKEa4bM3ASL7ChTCr6xN5XT+GpVJveFKK1cfNx9ExHI4rzYE=
[attachment]
PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/attachments
PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/attachments
[mailer]
ENABLED = true
@ -71,12 +71,12 @@ NO_REPLY_ADDRESS = noreply.example.org
[picture]
DISABLE_GRAVATAR = false
ENABLE_FEDERATED_AVATAR = false
AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/repo-avatars
AVATAR_UPLOAD_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/avatars
REPOSITORY_AVATAR_UPLOAD_PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/repo-avatars
[session]
PROVIDER = file
PROVIDER_CONFIG = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/sessions
PROVIDER_CONFIG = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/sessions
[log]
MODE = {{TEST_LOGGER}}
@ -103,7 +103,7 @@ DISABLE_QUERY_AUTH_TOKEN = true
JWT_SECRET = KZb_QLUd4fYVyxetjxC4eZkrBgWM2SndOOWDNtgUUko
[lfs]
PATH = tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/lfs
PATH = {{PROJECT_ROOT}}/tests/{{TEST_TYPE}}/gitea-{{TEST_TYPE}}-sqlite/data/lfs
[packages]
ENABLED = true
@ -111,7 +111,7 @@ ENABLED = true
[markup.html]
ENABLED = true
FILE_EXTENSIONS = .html
RENDER_COMMAND = `go run build/test-echo.go`
RENDER_COMMAND = `go run {{PROJECT_ROOT}}/build/test-echo.go`
IS_INPUT_FILE = false
RENDER_CONTENT_MODE=sanitized

View file

@ -376,6 +376,10 @@ var inTestEnv atomic.Bool
func PrepareTestEnv(t testing.TB, skip ...int) func() {
deferFn := PrepareTestEnvWithPackageData(t, skip...)
PrepareCleanPackageData(t)
giteaRoot := base.SetupGiteaRoot()
setting.AppWorkPath = giteaRoot
return deferFn
}