Skip to content

update(core): release 1.1.1 #156

update(core): release 1.1.1

update(core): release 1.1.1 #156

Workflow file for this run

name: Build Yogurt Executables
on:
push:
branches:
- main
paths-ignore:
- '.devin/**'
- 'kotlin-js-store/**'
- 'acidify-core-js/**'
- 'acidify-docs/**'
- '**.md'
workflow_dispatch:
permissions:
id-token: write
contents: write
jobs:
build-native:
if: contains(github.event.head_commit.message, '[skip build]') == false
runs-on: ${{ matrix.runs-on }}
strategy:
matrix:
include:
- runs-on: ubuntu-latest
target: mingwX64
gradle-target: MingwX64
platform: windows-x64
- runs-on: macos-latest
target: macosX64
gradle-target: MacosX64
platform: macos-x64
- runs-on: macos-latest
target: macosArm64
gradle-target: MacosArm64
platform: macos-arm64
- runs-on: ubuntu-latest
target: linuxX64
gradle-target: LinuxX64
platform: linux-x64
- runs-on: ubuntu-latest
target: linuxArm64
gradle-target: LinuxArm64
platform: linux-arm64
env:
GITHUB_ACTIONS_BUILD_TARGET: ${{ matrix.target }}
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Cache konan
uses: actions/cache@v4
with:
path: ~/.konan
key: ${{ runner.os }}-konan-${{ matrix.target }}-${{ hashFiles('**/gradle/libs.versions.toml') }}
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrappers
key: ${{ runner.os }}-gradleNativeBuild-${{ matrix.target }}-${{ hashFiles('**/gradle/libs.versions.toml') }}
- name: Setup JDK 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 25
- name: Install aarch64 libgcc
if: matrix.target == 'linuxArm64'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu
echo "LINUX_ARM64_LIBGCC=$(aarch64-linux-gnu-gcc -print-libgcc-file-name)" >> "$GITHUB_ENV"
- name: Build Yogurt for ${{ matrix.target }}
run: ./gradlew :yogurt:linkReleaseExecutable${{ matrix.gradle-target }} --no-daemon
- name: Upload ${{ matrix.target }} executable
uses: actions/upload-artifact@v4
with:
name: yogurt-${{ matrix.platform }}
path: yogurt/build/bin/${{ matrix.target }}/releaseExecutable/**
build-jvm:
if: contains(github.event.head_commit.message, '[skip build]') == false
runs-on: ubuntu-latest
env:
GITHUB_ACTIONS_BUILD_TARGET: jvm
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Setup JDK 21
uses: actions/setup-java@v5
with:
distribution: temurin
java-version: 25
cache: gradle
- name: Build yogurt-jvm fat jar
run: ./gradlew :yogurt-jvm:buildFatJar --no-daemon
- name: Upload fat jar artifact
uses: actions/upload-artifact@v4
with:
name: yogurt-jvm
path: yogurt-jvm/build/libs/yogurt-jvm-all.jar
publish-npm:
if: contains(github.event.head_commit.message, '[skip build]') == false
needs:
- build-native
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Download native artifacts
uses: actions/download-artifact@v4
with:
pattern: yogurt-*
path: native-artifacts
- name: Prepare npm packages
run: |
python3 <<'PY'
import json
import os
import re
import shutil
from pathlib import Path
root = Path(".").resolve()
gradle_file = root / "yogurt" / "build.gradle.kts"
gradle_content = gradle_file.read_text(encoding="utf-8")
match = re.search(r'version\s*=\s*"([^"]+)"', gradle_content)
if not match:
raise RuntimeError("Cannot find version in build.gradle.kts")
base_version = match.group(1)
build_number = os.environ.get("GITHUB_RUN_NUMBER")
if not build_number:
raise RuntimeError("GITHUB_RUN_NUMBER is not set")
npm_version = f"{base_version}-dev.{build_number}"
packages_dir = root / "yogurt-npm-packages"
artifacts_root = root / "native-artifacts"
platform_configs = [
{
"package": "yogurt-win32-x64",
"artifact": "yogurt-windows-x64",
"binary": "yogurt.exe",
},
{
"package": "yogurt-linux-x64",
"artifact": "yogurt-linux-x64",
"binary": "yogurt.kexe",
},
{
"package": "yogurt-linux-arm64",
"artifact": "yogurt-linux-arm64",
"binary": "yogurt.kexe",
},
{
"package": "yogurt-darwin-x64",
"artifact": "yogurt-macos-x64",
"binary": "yogurt.kexe",
},
{
"package": "yogurt-darwin-arm64",
"artifact": "yogurt-macos-arm64",
"binary": "yogurt.kexe",
},
]
def update_package_json(pkg_path: Path) -> None:
data = json.loads(pkg_path.read_text(encoding="utf-8"))
data["version"] = npm_version
optional = data.get("optionalDependencies")
if isinstance(optional, dict):
for key in optional.keys():
optional[key] = npm_version
pkg_path.write_text(json.dumps(data, indent=2) + "\n", encoding="utf-8")
for cfg in platform_configs:
payload_root = artifacts_root / cfg["artifact"]
if not payload_root.exists():
raise FileNotFoundError(f"Missing artifact contents for {cfg['artifact']}")
package_dir = packages_dir / cfg["package"]
package_dir.mkdir(parents=True, exist_ok=True)
binary_src = payload_root / cfg["binary"]
if not binary_src.exists():
raise FileNotFoundError(f"Missing binary {binary_src}")
binary_dest = package_dir / cfg["binary"]
shutil.copy2(binary_src, binary_dest)
if binary_dest.suffix == ".kexe":
binary_dest.chmod(0o755)
package_files = [
packages_dir / "yogurt-win32-x64" / "package.json",
packages_dir / "yogurt-linux-x64" / "package.json",
packages_dir / "yogurt-linux-arm64" / "package.json",
packages_dir / "yogurt-darwin-x64" / "package.json",
packages_dir / "yogurt-darwin-arm64" / "package.json",
packages_dir / "yogurt" / "package.json",
]
for pkg_file in package_files:
if not pkg_file.exists():
raise FileNotFoundError(f"Missing {pkg_file}")
update_package_json(pkg_file)
print(f"Prepared npm packages with version {npm_version}")
PY
- name: Setup Node.js
uses: actions/setup-node@v5
with:
node-version: 24
registry-url: https://registry.npmjs.org
- name: Update npm
run: npm install -g npm@latest
- name: Publish npm packages
run: |
set -euo pipefail
packages=(
"yogurt-npm-packages/yogurt-win32-x64"
"yogurt-npm-packages/yogurt-linux-x64"
"yogurt-npm-packages/yogurt-linux-arm64"
"yogurt-npm-packages/yogurt-darwin-x64"
"yogurt-npm-packages/yogurt-darwin-arm64"
"yogurt-npm-packages/yogurt"
)
for pkg in "${packages[@]}"; do
echo "Publishing $pkg"
cd "$pkg"
npm publish --tag latest --access public
cd -
done
release-yogurt:
if: contains(github.event.head_commit.message, '[skip build]') == false
needs:
- build-native
- build-jvm
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Download build artifacts
uses: actions/download-artifact@v4
with:
path: release-input
- name: Prepare release assets
run: |
set -euo pipefail
mkdir -p release-assets
for dir in release-input/yogurt-*; do
if [ -d "$dir" ]; then
base="$(basename "$dir")"
if [ "$base" = "yogurt-jvm" ]; then
continue
fi
(cd "$dir" && zip -r "../../release-assets/${base}.zip" .)
fi
done
if [ -f release-input/yogurt-jvm/yogurt-jvm-all.jar ]; then
cp release-input/yogurt-jvm/yogurt-jvm-all.jar release-assets/yogurt-jvm-all.jar
fi
- name: Resolve release version
id: release_version
run: |
set -euo pipefail
version="$(python3 <<'PY'
import re
from pathlib import Path
gradle_file = Path("yogurt") / "build.gradle.kts"
content = gradle_file.read_text(encoding="utf-8")
match = re.search(r'version\s*=\s*"([^"]+)"', content)
if not match:
raise SystemExit("Cannot find version in yogurt/build.gradle.kts")
print(match.group(1))
PY
)"
echo "release_version=${version}" >> "$GITHUB_OUTPUT"
echo "release_tag=v${version}-dev.${{ github.run_number }}" >> "$GITHUB_OUTPUT"
echo "release_name=Yogurt v${version} (build ${{ github.run_number }})" >> "$GITHUB_OUTPUT"
- name: Create release in SaltifyDev/yogurt-releases
uses: softprops/action-gh-release@v2
with:
repository: SaltifyDev/yogurt-releases
tag_name: ${{ steps.release_version.outputs.release_tag }}
name: ${{ steps.release_version.outputs.release_name }}
generate_release_notes: false
files: release-assets/*
body: |
Yogurt build #${{ github.run_number }}
*由 CI 自动构建并发布*
env:
GITHUB_TOKEN: ${{ secrets.YOGURT_RELEASE_TOKEN }}