#!/bin/bash # SPDX-License-Identifier: MIT function test_downgrade_1.20.2_fails() { local work_path=$DIR/forgejo-work-path log_info "See also https://codeberg.org/forgejo/forgejo/pulls/1225" log_info "downgrading from 1.20.3-0 to 1.20.2-0 fails" stop storage_reset default start 1.20.3-0 stop download 1.20.2-0 timeout 60 $DIR_BINARIES/forgejo-1.20.2-0 --config $work_path/app.ini --work-path $work_path || true if ! grep --fixed-strings --quiet 'use the newer database' $work_path/log/forgejo.log ; then cat $work_path/log/forgejo.log return 1 fi } function test_bug_storage_merged() { local work_path=$DIR/forgejo-work-path log_info "See also https://codeberg.org/forgejo/forgejo/pulls/1225" log_info "using < 1.20.3-0 and [storage].PATH merge all storage" for version in 1.18.5-0 1.19.4-0 1.20.2-0 ; do stop storage_reset merged start $version for path in ${STORAGE_PATHS} ; do ! test -d $work_path/data/$path done for path in ${STORAGE_PATHS} ; do ! test -d $work_path/merged/$path done test -d $work_path/merged done stop log_info "upgrading from 1.20.2-0 with [storage].PATH fails" download 1.20.3-0 timeout 60 $DIR_BINARIES/forgejo-1.20.3-0 --config $work_path/app.ini --work-path $work_path || true if ! grep --fixed-strings --quiet '[storage].PATH is set and may create storage issues' $work_path/log/forgejo.log ; then cat $work_path/log/forgejo.log return 1 fi } function test_bug_storage_relative_path() { local work_path=$DIR/forgejo-work-path log_info "using < 1.20.3-0 legacy [server].XXXX and [picture].XXXX are relative to WORK_PATH" for version in 1.18.5-0 1.19.4-0 1.20.2-0 ; do stop storage_reset legagy-relative start $version test -d $work_path/relative-lfs test -d $work_path/relative-avatars test -d $work_path/relative-repo-avatars done log_info "using >= 1.20.3-0 legacy [server].XXXX and [picture].XXXX are relative to APP_DATA_PATH" for version in 1.20.3-0 1.21.0-5-rc2 ; do stop storage_reset legagy-relative start $version test -d $work_path/data/relative-lfs test -d $work_path/data/relative-avatars test -d $work_path/data/relative-repo-avatars done log_info "using >= 1.20.3-0 relative [storage.XXXX].PATHS are relative to APP_DATA_PATH" for version in 1.20.3-0 1.21.0-5-rc2 ; do stop storage_reset storage-relative start $version for path in ${STORAGE_PATHS} ; do test -d $work_path/data/relative-$path done done log_info "using 1.20.[12]-0 relative [storage.XXXX].PATHS are inconsistent" for version in 1.20.2-0 ; do stop storage_reset storage-relative start $version test -d $work_path/data/packages test -d $work_path/relative-repo-archive test -d $work_path/relative-attachments test -d $work_path/relative-lfs test -d $work_path/data/avatars test -d $work_path/data/repo-avatars done log_info "using < 1.20 relative [storage.XXXX].PATHS are inconsistent" for version in 1.18.5-0 1.19.4-0 ; do stop storage_reset storage-relative start $version test -d $work_path/relative-packages test -d $work_path/relative-repo-archive test -d $work_path/relative-attachments test -d $work_path/data/lfs test -d $work_path/data/avatars test -d $work_path/data/repo-avatars done log_info "using < 1.20.3-0 relative [XXXX].PATHS are relative to WORK_PATH" for version in 1.18.5-0 1.19.4-0 1.20.2-0 ; do stop storage_reset relative start $version for path in ${STORAGE_PATHS} ; do test -d $work_path/relative-$path done done log_info "using >= 1.20.3-0 relative [XXXX].PATHS are relative to APP_DATA_PATH" for version in 1.20.3-0 1.21.0-5-rc2 ; do stop storage_reset relative start $version for path in ${STORAGE_PATHS} ; do test -d $work_path/data/relative-$path done done stop } function test_bug_storage_s3_misplace() { local work_path=$DIR/forgejo-work-path local s3_backend=${2:-minio} log_info "See also https://codeberg.org/forgejo/forgejo/issues/1338" for version in 1.20.2-0 1.20.3-0 ; do log_info "Forgejo $version & $s3_backend" stop storage_reset misplace-s3 start $version $s3_backend fixture_create for fun in ${STORAGE_FUN} ; do fixture_${fun}_assert_s3 done done for version in 1.18.5-0 1.19.4-0 ; do log_info "Forgejo $version & $s3_backend" stop storage_reset misplace-s3 start $version $s3_backend fixture_create # # some storage are in S3 # fixture_attachments_assert_s3 fixture_lfs_assert_s3 # # others are in local # fixture_repo_archive_assert_local elsewhere/repo-archive fixture_avatars_assert_local elsewhere/avatars fixture_packages_assert_local elsewhere/packages fixture_repo_avatars_assert_local elsewhere/repo-avatars done } function test_bug_storage_misplace() { local work_path=$DIR/forgejo-work-path log_info "See also https://codeberg.org/forgejo/forgejo/pulls/1225" log_info "using < 1.20 and conflicting sections misplace storage" for version in 1.18.5-0 1.19.4-0 ; do stop storage_reset misplace start $version # # some storage are where they should be # test -d $work_path/data/packages test -d $work_path/data/repo-archive test -d $work_path/data/attachments # # others are under APP_DATA_PATH # test -d $work_path/elsewhere/lfs test -d $work_path/elsewhere/avatars test -d $work_path/elsewhere/repo-avatars done log_info "using < 1.20.[12]-0 and conflicting sections ignores [storage.*]" for version in 1.20.2-0 ; do stop storage_reset misplace start $version for path in ${STORAGE_PATHS} ; do test -d $work_path/elsewhere/$path done done stop log_info "upgrading from 1.20.2-0 with conflicting sections fails" download 1.20.3-0 timeout 60 $DIR_BINARIES/forgejo-1.20.3-0 --config $work_path/app.ini --work-path $work_path || true for path in ${STORAGE_PATHS} ; do if ! grep --fixed-strings --quiet "[storage.$path] may conflict" $work_path/log/forgejo.log ; then cat $work_path/log/forgejo.log return 1 fi done } function test_upgrade_1_20_storage() { run test_bug_storage_misplace run test_bug_storage_merged run test_downgrade_1.20.2_fails run test_bug_storage_s3_misplace }