diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b324e85..929e54d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ name: Continuous Integration env: # Specify the current Zig version MicroZig uses: ZIG_VERSION: 0.11.0 + DEPLOYMENT_URL: "https://download.microzig.tech" on: push: @@ -69,12 +70,22 @@ jobs: run: | pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec - - name: Generate and validate packages + - name: Generate packages run: | - ./tools/bundle.py + ./tools/bundle.py --debug - - name: Upload artifacts - uses: actions/upload-artifact@v4 + - name: Spawn local web server + uses: Eun/http-server-action@v1 with: - name: packages - path: microzig-deploy/ + directory: "${{ github.workspace }}/microzig-deploy" + port: 8080 + content-types: | + { + "gz": "application/gzip", + "json": "application/json" + } + + - name: Validate examples + run: | + mkdir -p "${{ github.workspace }}/microzig-test" + ./tools/validate-all-examples.sh --build-root "${{ github.workspace }}/microzig-test" diff --git a/tools/bundle.py b/tools/bundle.py index 4e0e215..2a4bd50 100755 --- a/tools/bundle.py +++ b/tools/bundle.py @@ -14,6 +14,7 @@ from dataclasses_json import dataclass_json, config as dcj_config, Exclude as J from semver import Version from marshmallow import fields from enum import Enum as StrEnum +from argparse import ArgumentParser import pathspec import stat import tarfile @@ -26,6 +27,9 @@ from typing import Optional, Any from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools import lib.common as common +DEFAULT_DEPLOYMENT_BASE="https://download.microzig.tech/packages" +DEBUG_DEPLOYMENT_BASE="http://localhost:8080" + LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$") VERBOSE = False @@ -34,8 +38,7 @@ REQUIRED_TOOLS = [ "zig", "git", ] -# DEPLOYMENT_BASE="https://download.microzig.tech/packages" -DEPLOYMENT_BASE="https://public.devspace.random-projects.net" + REPO_ROOT = Path(__file__).parent.parent assert REPO_ROOT.is_dir() @@ -230,6 +233,17 @@ def get_batch_timestamp(): def main(): + + arg_parser = ArgumentParser() + + arg_parser.add_argument("--base-url", type=str, required=False, default=DEFAULT_DEPLOYMENT_BASE, help="Sets the download URL for the packages.") + arg_parser.add_argument("--debug", action="store_true", required=False, default=False, help="Creates a deployment for local development, hosted by localhost:8080") + + cli_args = arg_parser.parse_args() + + base_url = cli_args.base_url if not cli_args.debug else DEBUG_DEPLOYMENT_BASE + + check_required_tools(REQUIRED_TOOLS) check_zig_version("0.11.0") @@ -326,7 +340,7 @@ def main(): assert False download_path = pkg.out_rel_dir / ALL_FILES_DIR / f"{pkg.out_basename}-{version}.tar.gz" - pkg.download_url = f"{DEPLOYMENT_BASE}/{download_path}" + pkg.download_url = f"{base_url}/{download_path}" buildzig_path = pkg_dir / "build.zig" buildzon_path = pkg_dir / "build.zig.zon" diff --git a/tools/validate-all-examples.sh b/tools/validate-all-examples.sh index 8af432b..7d0982e 100755 --- a/tools/validate-all-examples.sh +++ b/tools/validate-all-examples.sh @@ -3,12 +3,9 @@ set -e root="$(dirname "$(realpath "$0")")" -tmpdir="/tmp/microzig-test" - -mkdir -p "${tmpdir}" examples="espressif/esp stmicro/stm32 nordic/nrf5x gigadevice/gd32 raspberrypi/rp2040 nxp/lpc microchip/atsam" # microchip/avr (does not build with 0.11) for key in ${examples}; do - "${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" + "${root}/validate-example.py" --example "$key" "$@" done diff --git a/tools/validate-example.py b/tools/validate-example.py index d04c8af..4b9ab30 100755 --- a/tools/validate-example.py +++ b/tools/validate-example.py @@ -8,6 +8,7 @@ import sys import shutil REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"] +DEBUG_DEPLOYMENT_BASE="http://localhost:8080" def main(): @@ -20,10 +21,13 @@ def main(): parser.add_argument("--example", type=PurePosixPath, required=True) parser.add_argument("--build-root", type=Path, required=True) + parser.add_argument("--base-url", type=str, required=False, default=DEBUG_DEPLOYMENT_BASE, help="Sets the download URL for the packages.") + args = parser.parse_args() example_id: PurePosixPath = args.example build_root: Path = args.build_root + base_url: str = args.base_url if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".": print(f"example must be /", file=sys.stderr) @@ -41,7 +45,7 @@ def main(): "curl", "-o", f"{example_name}.tar.gz", - f"https://public.devspace.random-projects.net/examples/{example_group}/{example_name}.tar.gz", + f"{base_url}/examples/{example_group}/{example_name}.tar.gz", cwd=build_root, )