diff --git a/.env b/.env new file mode 100644 index 0000000..528ad70 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +# Auto-generated by build\tools\generate-dotenv.ps1 +SNOW_VERSION=0.7.0 diff --git a/Dockerfile b/Dockerfile index a05335e..bfc25e7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Stage 1: 官方 GraalVM 社区版(已含 native-image) -FROM ghcr.io/graalvm/native-image-community:latest AS builder +FROM ghcr.io/graalvm/native-image-community:24.0.2 AS builder RUN microdnf install -y \ gcc gcc-c++ make git wget tar gzip which findutils maven \ diff --git a/build/release-linux.ps1 b/build/release-linux.ps1 new file mode 100644 index 0000000..b3a332b --- /dev/null +++ b/build/release-linux.ps1 @@ -0,0 +1,26 @@ +# run-linux-snow-export.ps1 + +Write-Host "Step 0: Generate .env..." +try { + & "$PSScriptRoot\tools\generate-dotenv.ps1" -ErrorAction Stop +} +catch { + Write-Error "Failed to generate .env: $($_.Exception.Message)" + exit 1 +} + +Write-Host "Step 1: Build and run linux-snow-export..." +docker compose run --build --rm linux-snow-export +if ($LASTEXITCODE -ne 0) { + Write-Error "Build & Run failed, exiting script." + exit $LASTEXITCODE +} + +Write-Host "Step 2: Run linux-snow-export without rebuild..." +docker compose run --rm linux-snow-export +if ($LASTEXITCODE -ne 0) { + Write-Error "Run without rebuild failed, exiting script." + exit $LASTEXITCODE +} + +Write-Host "All steps completed successfully!" diff --git a/build/tools/generate-dotenv.ps1 b/build/tools/generate-dotenv.ps1 new file mode 100644 index 0000000..8a00eba --- /dev/null +++ b/build/tools/generate-dotenv.ps1 @@ -0,0 +1,23 @@ +# build\tools\generate-dotenv.ps1 + +# Repository root: go up two levels from build\tools\ +$repoRoot = (Get-Item $PSScriptRoot).Parent.Parent.FullName +$envPath = Join-Path $repoRoot ".env" +$pomPath = Join-Path $repoRoot "pom.xml" + +if (-not (Test-Path $pomPath -PathType Leaf)) { + throw "pom.xml not found: $pomPath" +} + +[xml]$pom = Get-Content $pomPath -Encoding UTF8 +$version = $pom.project.version + +$lines = @( + "# Auto-generated by build\tools\generate-dotenv.ps1" + "SNOW_VERSION=$version" +) + +$utf8NoBom = New-Object System.Text.UTF8Encoding($false) +[System.IO.File]::WriteAllLines($envPath, $lines, $utf8NoBom) +Write-Host "Generated/overwritten $envPath (version: $version)" +return diff --git a/docker-compose.yml b/docker-compose.yml index 21bca91..f60b702 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,8 +1,24 @@ services: - snow-export: - image: my-snow-export + # Run with: docker compose run --rm linux-snow-export + linux-snow-export: build: context: . - command: [ "/bin/sh", "-c", "cp /export/Snow /output/Snow" ] + target: export + command: + - /bin/sh + - -c + - | + set -e + ver="Snow-v${SNOW_VERSION}-linux-x64" + mkdir -p "/output/release/$$ver/bin" + cp /export/Snow "/output/release/$$ver/bin/" + if [ -d /export/lib ]; then + mkdir -p "/output/release/$$ver/lib" + cp -a /export/lib/. "/output/release/$$ver/lib/" + fi + tar -C /output/release -czf "/output/release/$$ver.tgz" "$$ver" volumes: - ./target:/output + - ./lib:/export/lib:ro + env_file: + - .env