Adds deployment+example test to CI

wch-ch32v003
Felix "xq" Queißner 8 months ago
parent 1643c30d7d
commit a4ac2d1858

@ -3,6 +3,7 @@ name: Continuous Integration
env: env:
# Specify the current Zig version MicroZig uses: # Specify the current Zig version MicroZig uses:
ZIG_VERSION: 0.11.0 ZIG_VERSION: 0.11.0
DEPLOYMENT_URL: "https://download.microzig.tech"
on: on:
push: push:
@ -69,12 +70,22 @@ jobs:
run: | run: |
pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec pip install dataclasses_json==0.6.3 marshmallow typing-inspect semver pathspec
- name: Generate and validate packages - name: Generate packages
run: | run: |
./tools/bundle.py ./tools/bundle.py --debug
- name: Upload artifacts - name: Spawn local web server
uses: actions/upload-artifact@v4 uses: Eun/http-server-action@v1
with: with:
name: packages directory: "${{ github.workspace }}/microzig-deploy"
path: 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"

@ -14,6 +14,7 @@ from dataclasses_json import dataclass_json, config as dcj_config, Exclude as J
from semver import Version from semver import Version
from marshmallow import fields from marshmallow import fields
from enum import Enum as StrEnum from enum import Enum as StrEnum
from argparse import ArgumentParser
import pathspec import pathspec
import stat import stat
import tarfile 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 from lib.common import execute_raw, execute, slurp, check_zig_version, check_required_tools
import lib.common as common 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]$") LEGAL_PACKAGE_NAME = re.compile("^[A-Za-z]$")
VERBOSE = False VERBOSE = False
@ -34,8 +38,7 @@ REQUIRED_TOOLS = [
"zig", "zig",
"git", "git",
] ]
# DEPLOYMENT_BASE="https://download.microzig.tech/packages"
DEPLOYMENT_BASE="https://public.devspace.random-projects.net"
REPO_ROOT = Path(__file__).parent.parent REPO_ROOT = Path(__file__).parent.parent
assert REPO_ROOT.is_dir() assert REPO_ROOT.is_dir()
@ -230,6 +233,17 @@ def get_batch_timestamp():
def main(): 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_required_tools(REQUIRED_TOOLS)
check_zig_version("0.11.0") check_zig_version("0.11.0")
@ -326,7 +340,7 @@ def main():
assert False assert False
download_path = pkg.out_rel_dir / ALL_FILES_DIR / f"{pkg.out_basename}-{version}.tar.gz" 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" buildzig_path = pkg_dir / "build.zig"
buildzon_path = pkg_dir / "build.zig.zon" buildzon_path = pkg_dir / "build.zig.zon"

@ -3,12 +3,9 @@
set -e set -e
root="$(dirname "$(realpath "$0")")" 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) 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 for key in ${examples}; do
"${root}/validate-example.py" --build-root "${tmpdir}" --example "$key" "${root}/validate-example.py" --example "$key" "$@"
done done

@ -8,6 +8,7 @@ import sys
import shutil import shutil
REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"] REQUIRED_TOOLS = ["zig", "curl", "tar", "gunzip"]
DEBUG_DEPLOYMENT_BASE="http://localhost:8080"
def main(): def main():
@ -20,10 +21,13 @@ def main():
parser.add_argument("--example", type=PurePosixPath, required=True) parser.add_argument("--example", type=PurePosixPath, required=True)
parser.add_argument("--build-root", type=Path, 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() args = parser.parse_args()
example_id: PurePosixPath = args.example example_id: PurePosixPath = args.example
build_root: Path = args.build_root build_root: Path = args.build_root
base_url: str = args.base_url
if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".": if len(example_id.parents) != 2 or str(example_id.parents[1]) != ".":
print(f"example must be <group>/<id>", file=sys.stderr) print(f"example must be <group>/<id>", file=sys.stderr)
@ -41,7 +45,7 @@ def main():
"curl", "curl",
"-o", "-o",
f"{example_name}.tar.gz", 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, cwd=build_root,
) )

Loading…
Cancel
Save