From a16f0ac059e239483a70776608d7134cc90dd8e7 Mon Sep 17 00:00:00 2001 From: Luke Date: Mon, 25 Aug 2025 12:32:10 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=20Linux=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=AF=BC=E5=87=BA=E8=84=9A=E6=9C=AC=E5=92=8C=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 .env 文件和生成脚本 - 更新 docker-compose.yml 和 Dockerfile 以支持 Linux 版本导出 - 添加 PowerShell 脚本生成 .env 文件 - 实现 Linux 版本导出的完整流程 --- .env | 2 ++ Dockerfile | 2 +- build/release-linux.ps1 | 26 ++++++++++++++++++++++++++ build/tools/generate-dotenv.ps1 | 23 +++++++++++++++++++++++ docker-compose.yml | 22 +++++++++++++++++++--- 5 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 .env create mode 100644 build/release-linux.ps1 create mode 100644 build/tools/generate-dotenv.ps1 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