From 9c6eabd33a5d85611f1dcb76e0d61eed567a5659 Mon Sep 17 00:00:00 2001 From: loonghao Date: Sat, 10 Aug 2024 11:25:55 +0800 Subject: [PATCH] feat: Update ci to support Mac and Linux Signed-off-by: loonghao --- .github/workflows/mr-test.yml | 13 +++++--- .github/workflows/python-publish.yml | 10 ++++-- nox_actions/release.py | 47 ++++++++++++++++++---------- 3 files changed, 47 insertions(+), 23 deletions(-) diff --git a/.github/workflows/mr-test.yml b/.github/workflows/mr-test.yml index cbd2ca4..d8fa9f0 100644 --- a/.github/workflows/mr-test.yml +++ b/.github/workflows/mr-test.yml @@ -3,13 +3,19 @@ on: [ pull_request ] jobs: python-check: - runs-on: ${{ matrix.os }} strategy: max-parallel: 3 matrix: - os: [ 'windows-2019' ] + target: + - os: 'ubuntu-22.04' + triple: 'x86_64-unknown-linux-musl-gnu' + - os: 'macos-12' + triple: 'x86_64-apple-darwin' + - os: 'windows-2022' + triple: 'x86_64-pc-windows-msvc' python-version: ["3.10"] fail-fast: false + runs-on: ${{ matrix.target.os }} steps: - name: Checkout uses: actions/checkout@v4 @@ -26,5 +32,4 @@ jobs: nox -s lint - name: test build run: | - nox -s build-exe - build\x86_64-pc-windows-msvc\release\install\rez.exe env --help + nox -s build-exe -- --test diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index b265dea..fd34a99 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -7,13 +7,19 @@ on: jobs: deploy: - runs-on: ${{ matrix.os }} strategy: max-parallel: 3 matrix: - os: [ 'windows-2019' ] + target: + - os: 'ubuntu-22.04' + triple: 'x86_64-unknown-linux-musl-gnu' + - os: 'macos-12' + triple: 'x86_64-apple-darwin' + - os: 'windows-2022' + triple: 'x86_64-pc-windows-msvc' python-version: ["3.10"] fail-fast: false + runs-on: ${{ matrix.target.os }} permissions: # IMPORTANT: this permission is mandatory for trusted publishing id-token: write diff --git a/nox_actions/release.py b/nox_actions/release.py index ce124c9..476d4a6 100644 --- a/nox_actions/release.py +++ b/nox_actions/release.py @@ -2,6 +2,7 @@ import argparse import os import shutil +import subprocess import zipfile # Import third-party modules @@ -15,24 +16,36 @@ def build_exe(session: nox.Session) -> None: parser = argparse.ArgumentParser(prog="nox -s build-exe --release") parser.add_argument("--release", action="store_true") parser.add_argument("--version", default="0.5.0", help="Version to use for the zip file") + parser.add_argument("--test", action="store_true") args = parser.parse_args(session.posargs) - build_root = THIS_ROOT / "build" / "x86_64-pc-windows-msvc" / "release" / "install" + build_root = THIS_ROOT / "build" + binary_name = "portable_rez.exe" if os.name == "nt" else "portable_rez" + rez_binary_name = "rez.exe" if os.name == "nt" else "rez" session.install("pyoxidizer") session.run("pyoxidizer", "build", "install", "--path", THIS_ROOT, "--release") - rez_exe = build_root / "portable_rez.exe" - rez_exe.rename(build_root / "rez.exe") + for platform_name in os.listdir(build_root): + platform_dir = build_root / platform_name / "release" / "install" + print(os.listdir(platform_dir)) + print(f"build {platform_name}") + print(f"rename {binary_name} to {rez_binary_name}") + rez_exe = platform_dir / binary_name + rez_exe.rename(platform_dir / rez_binary_name) - if args.release: - temp_dir = os.path.join(THIS_ROOT, ".zip") - shutil.rmtree(temp_dir, ignore_errors=True) - version = str(args.version) - print(f"make zip to current version: {version}") - os.makedirs(temp_dir, exist_ok=True) - zip_file = os.path.join(temp_dir, f"{PACKAGE_NAME}-{version}.zip") - with zipfile.ZipFile(zip_file, "w") as zip_obj: - for root, _, files in os.walk(build_root): - for file in files: - zip_obj.write(os.path.join(root, file), - os.path.relpath(os.path.join(root, file), - os.path.join(build_root, "."))) - print("Saving to {zipfile}".format(zipfile=zip_file)) + if args.test: + print("run tests") + subprocess.check_call(["rez", "--help"], cwd=platform_dir) + + if args.release: + temp_dir = os.path.join(THIS_ROOT, ".zip") + shutil.rmtree(temp_dir, ignore_errors=True) + version = str(args.version) + print(f"make zip to current version: {version}") + os.makedirs(temp_dir, exist_ok=True) + zip_file = os.path.join(temp_dir, f"{PACKAGE_NAME}-{version}-{platform_name}.zip") + with zipfile.ZipFile(zip_file, "w") as zip_obj: + for root, _, files in os.walk(platform_dir): + for file in files: + zip_obj.write(os.path.join(root, file), + os.path.relpath(os.path.join(root, file), + os.path.join(platform_dir, "."))) + print("Saving to {zipfile}".format(zipfile=zip_file))