This commit is contained in:
@@ -30,8 +30,9 @@ test_erp_run_preserves_java_option_arguments() (
|
||||
local tmp
|
||||
tmp="$(mktemp -d "${TMPDIR:-/tmp}/erp-run-test.XXXXXX")" || return 1
|
||||
trap 'rm -rf "$tmp"' EXIT
|
||||
mkdir -p "$tmp/current/app" "$tmp/run"
|
||||
mkdir -p "$tmp/current/app" "$tmp/run" "$tmp/state"
|
||||
: > "$tmp/current/app/kaidi-erp.jar"
|
||||
: > "$tmp/state/install.lock"
|
||||
: > "$tmp/-Dpattern=expanded"
|
||||
printf '%s\n' \
|
||||
'#!/usr/bin/env bash' \
|
||||
@@ -63,7 +64,8 @@ prepare_signed_archive() {
|
||||
ln -s /etc/passwd "$tmp/package/kaidi-erp-1.2.3/unsafe-link"
|
||||
fi
|
||||
tar -czf "$tmp/kaidi-erp-1.2.3.tar.gz" -C "$tmp/package" kaidi-erp-1.2.3
|
||||
(cd "$tmp" && checksum_file kaidi-erp-1.2.3.tar.gz) > "$tmp/SHA256SUMS"
|
||||
printf 'installer jar\n' > "$tmp/kaidi-erp-installer-1.2.3.jar"
|
||||
(cd "$tmp" && checksum_file kaidi-erp-1.2.3.tar.gz && checksum_file kaidi-erp-installer-1.2.3.jar) > "$tmp/SHA256SUMS"
|
||||
openssl pkeyutl -sign -rawin -inkey "$tmp/private.pem" \
|
||||
-in "$tmp/SHA256SUMS" -out "$tmp/SHA256SUMS.sig"
|
||||
}
|
||||
@@ -82,6 +84,8 @@ test_installer_verifies_signed_safe_archive() (
|
||||
PUBLIC_KEY="$(<"$tmp/public.pem")"
|
||||
ARCHIVE_NAME=kaidi-erp-1.2.3.tar.gz
|
||||
ARCHIVE_PATH="$tmp/$ARCHIVE_NAME"
|
||||
INSTALLER_NAME=kaidi-erp-installer-1.2.3.jar
|
||||
INSTALLER_PATH="$tmp/$INSTALLER_NAME"
|
||||
verify_release
|
||||
)
|
||||
|
||||
@@ -99,6 +103,8 @@ test_installer_rejects_archive_symlinks() (
|
||||
PUBLIC_KEY="$(<"$tmp/public.pem")"
|
||||
ARCHIVE_NAME=kaidi-erp-1.2.3.tar.gz
|
||||
ARCHIVE_PATH="$tmp/$ARCHIVE_NAME"
|
||||
INSTALLER_NAME=kaidi-erp-installer-1.2.3.jar
|
||||
INSTALLER_PATH="$tmp/$INSTALLER_NAME"
|
||||
! (verify_release) >/dev/null 2>&1
|
||||
)
|
||||
|
||||
@@ -130,10 +136,11 @@ prepare_update_release_archive() {
|
||||
printf '%s\n' "$version" > "$root/VERSION"
|
||||
printf '{"version":"%s","database":"postgresql","rollbackCompatible":true}\n' \
|
||||
"$version" > "$root/manifest.json"
|
||||
printf 'installer jar %s\n' "$version" > "$tmp/assets/kaidi-erp-installer-$version.jar"
|
||||
|
||||
local archive="kaidi-erp-$version.tar.gz"
|
||||
tar -czf "$tmp/assets/$archive" -C "$tmp/package" "kaidi-erp-$version"
|
||||
(cd "$tmp/assets" && checksum_file "$archive") > "$tmp/assets/SHA256SUMS"
|
||||
(cd "$tmp/assets" && checksum_file "$archive" && checksum_file "kaidi-erp-installer-$version.jar") > "$tmp/assets/SHA256SUMS"
|
||||
: > "$tmp/assets/SHA256SUMS.sig"
|
||||
}
|
||||
|
||||
@@ -180,6 +187,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
"prerelease": False,
|
||||
"assets": [
|
||||
{"name": archive, "browser_download_url": base + "/" + archive},
|
||||
{"name": f"kaidi-erp-installer-{version}.jar", "browser_download_url": base + f"/assets/kaidi-erp-installer-{version}.jar"},
|
||||
{"name": "SHA256SUMS", "browser_download_url": base + "/SHA256SUMS"},
|
||||
{"name": "SHA256SUMS.sig", "browser_download_url": base + "/SHA256SUMS.sig"},
|
||||
],
|
||||
@@ -188,7 +196,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
return
|
||||
if self.path.startswith("/assets/"):
|
||||
name = self.path.removeprefix("/assets/")
|
||||
if name not in {archive, "SHA256SUMS", "SHA256SUMS.sig"}:
|
||||
if name not in {archive, f"kaidi-erp-installer-{version}.jar", "SHA256SUMS", "SHA256SUMS.sig"}:
|
||||
self.send_bytes(404, b"not found", "text/plain")
|
||||
return
|
||||
with open(os.path.join(assets, name), "rb") as handle:
|
||||
@@ -224,23 +232,13 @@ PY
|
||||
ERP_CONFIG_ROOT="$tmp/config"
|
||||
ERP_STATE_ROOT="$tmp/state"
|
||||
ERP_LOG_ROOT="$tmp/log"
|
||||
DB_MODE=existing
|
||||
NO_SERVICE=0
|
||||
PUBLIC_KEY="$(<"$tmp/public.pem")"
|
||||
|
||||
detect_platform() { PLATFORM=darwin; }
|
||||
install_dependencies() { return 0; }
|
||||
configure_existing_postgres() {
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_NAME=kaidi_erp
|
||||
DB_USER=kaidi_erp
|
||||
DB_PASSWORD=test-password
|
||||
DB_SSLMODE=require
|
||||
}
|
||||
validate_postgres() { return 0; }
|
||||
install_service() { return 0; }
|
||||
wait_for_health() { return 0; }
|
||||
check_and_install_dependencies() { JAVA_BIN="$(command -v java)"; return 0; }
|
||||
start_service() { return 0; }
|
||||
wait_for_installer() { return 0; }
|
||||
|
||||
main > "$tmp/install.log" 2>&1 || return 1
|
||||
|
||||
@@ -251,8 +249,8 @@ PY
|
||||
[[ "$SPRING_PROFILES_ACTIVE" == "postgres" ]]
|
||||
[[ "$OA_UPDATE_ENABLED" == "true" ]]
|
||||
[[ "$OA_UPDATE_GITEA_BASE_URL" == "http://127.0.0.1:$port" ]]
|
||||
[[ "$OA_DB_URL" == "jdbc:postgresql://127.0.0.1:5432/kaidi_erp?sslmode=require" ]]
|
||||
[[ "$ERP_PGSSLMODE" == "require" ]]
|
||||
[[ "$ERP_SETUP_TOKEN" =~ ^[0-9a-f]{64}$ ]]
|
||||
[[ -z "${OA_DB_URL:-}" ]]
|
||||
)
|
||||
)
|
||||
|
||||
@@ -440,16 +438,10 @@ test_update_lock_rejects_concurrent_process() (
|
||||
[[ "$rejected" == "1" ]]
|
||||
)
|
||||
|
||||
test_noninteractive_installer_reports_missing_password() (
|
||||
test_installer_moves_database_setup_to_web_wizard() (
|
||||
local output status=0
|
||||
output="$(ERP_INSTALL_NON_INTERACTIVE=1 bash -c '
|
||||
root="$1"
|
||||
set --
|
||||
source "$root/install.sh"
|
||||
unset ERP_DB_PASSWORD DB_PASSWORD
|
||||
configure_existing_postgres
|
||||
' _ "$PROJECT_ROOT" 2>&1)" || status=$?
|
||||
[[ "$status" -ne 0 && "$output" == *'database password is required'* ]]
|
||||
output="$(bash "$PROJECT_ROOT/install.sh" --db-mode existing 2>&1)" || status=$?
|
||||
[[ "$status" -ne 0 && "$output" == *'unknown option: --db-mode'* ]]
|
||||
)
|
||||
|
||||
test_installer_requires_explicit_gitea_url() (
|
||||
@@ -475,15 +467,13 @@ test_no_service_install_disables_online_update() (
|
||||
INSTALL_ROOT="$tmp/install"
|
||||
PLATFORM=darwin
|
||||
NO_SERVICE=1
|
||||
DB_HOST=127.0.0.1
|
||||
DB_PORT=5432
|
||||
DB_NAME=kaidi_erp
|
||||
DB_USER=kaidi_erp
|
||||
DB_PASSWORD=test-password
|
||||
DB_SSLMODE=require
|
||||
VERSION=1.0.0
|
||||
JAVA_BIN="$(command -v java)"
|
||||
GITEA_BASE_URL=https://example.test
|
||||
REPOSITORY=awaioi/ERP
|
||||
mkdir -p "$CONFIG_ROOT" "$STATE_ROOT" "$INSTALL_ROOT"
|
||||
|
||||
write_configuration || return 1
|
||||
write_bootstrap_configuration || return 1
|
||||
|
||||
grep -Fqx 'OA_UPDATE_ENABLED=false' "$CONFIG_ROOT/erp.env"
|
||||
)
|
||||
@@ -514,7 +504,7 @@ run_test 'installer downloads and installs a signed release end to end' test_ins
|
||||
run_test 'update helper installs a healthy release end to end' test_update_helper_installs_healthy_release
|
||||
run_test 'update helper rolls back an unhealthy release end to end' test_update_helper_rolls_back_unhealthy_release
|
||||
run_test 'update helper rejects a concurrent process' test_update_lock_rejects_concurrent_process
|
||||
run_test 'noninteractive install reports a missing database password' test_noninteractive_installer_reports_missing_password
|
||||
run_test 'installer moves database setup to the web wizard' test_installer_moves_database_setup_to_web_wizard
|
||||
run_test 'installer requires an explicit Gitea URL' test_installer_requires_explicit_gitea_url
|
||||
run_test 'no-service install disables online update' test_no_service_install_disables_online_update
|
||||
run_test 'release workflow uses the scoped Gitea job token' test_release_workflow_uses_scoped_job_token
|
||||
|
||||
Reference in New Issue
Block a user