Commit Graph
30 Commits
Author SHA1 Message Date
Simone 95ee91c506 ci: rename build-nsInnoUnp.yml -> build-ns7zip.yml; update doc refs
Workflow now targets Simone/nsis-plugin-ns7zip. Renamed the file and
the workflow `name:`, and updated all references in active docs
(plans/archived and docs/archived left as frozen history).
2026-05-17 20:12:25 +02:00
Simone ff0aaab9da ci: build-nsInnoUnp targets nsis-plugin-ns7zip
Switch the cross-repo build target to Simone/nsis-plugin-ns7zip
(repo-url, artifact-name, release asset name).
2026-05-17 20:09:15 +02:00
Simone 5962951234 fix(ci): don't splat empty --commit (PS5.1 drops zero-length args)
PowerShell 5.1 drops a zero-length string when splatting to a native
exe, so an empty $repoCommit shifted flag/value pairing and click saw
the build command as an unexpected positional. Append --commit only
when a commit is set.
2026-05-17 17:39:36 +02:00
Simone 9f54c99c9c feat(ci): repo-branch/repo-commit inputs for cross-repo builds
github.ref_name/github.sha refer to the workflow's own repo. When
repo-url points elsewhere (build-nsInnoUnp builds
nsis-plugin-nsinnounp) the workflow's branch does not exist there
("Remote branch ... not found in upstream origin"). New inputs:
- repo-branch: target branch (default: github.ref_name)
- repo-commit: target commit (default: github.sha only if repo-url
  not overridden; cross-repo => empty = branch tip, no pin)
build-nsInnoUnp.yml sets repo-branch: main.
2026-05-17 17:37:18 +02:00
Simone 27070ebb3e fix(ci): build-nsInnoUnp uses host-side clone (SSH alias is host-only)
repo-url is ssh://gitea-ci/... — an SSH alias defined only in the
host ~/.ssh/config. With the new in-guest-clone default the guest
tried to resolve `gitea-ci` and failed (name resolution). Set
use-git-clone:'false' so the host (which has the alias + SSH key)
performs the clone.
2026-05-17 17:24:00 +02:00
Simone 81672e9285 fix(ci): build-nsInnoUnp uses full Gitea action URL
Short-form `Simone/local-ci-cd-system/...@main` resolved to
github.com (DEFAULT_ACTIONS_URL=github) -> "authentication required:
Repository not found". Use the full gitea.emulab.it URL like
self-test.yml.
2026-05-17 17:14:23 +02:00
Simone 8d059cd3c4 feat(job): wire use-git-clone + submodules; default in-guest clone
The job command previously discarded --use-git-clone and --submodules
(`del`) and always in-guest cloned with submodules off — making both
action inputs dead no-ops (submodule repos silently broken).

- job.py: --use-git-clone/--host-clone and --submodules/--no-submodules
  are real booleans defaulting to ON. Default = in-guest clone with
  submodules. --host-clone clones on the host into a temp dir
  (_host_clone) and transfers a zip; temp dir cleaned in finally.
  clone_submodules now honoured (was hardcoded False).
- action.yml: use-git-clone / submodules default 'true'; forward the
  explicit positive/negative flag so the Python default is overridden
  deterministically.
- self-test.yml: add smoke-{windows,linux}-hostclone jobs covering the
  host-side transport (default jobs already cover in-guest).
- tests: default-transport, host-clone, and --no-submodules coverage.
2026-05-17 17:00:46 +02:00
Simone 1e5cdc3b00 refactor(ci): drop upload/download-artifact (remove github.com dependency)
actions/upload-artifact and download-artifact run code fetched from
github.com (and v4 is GHES-incompatible, v3 deprecated). The runner
host is single with a shared filesystem, so the orchestrator's
host-side collect dir is the artifact handoff:

- action.yml: replace the two upload-artifact steps with
  host-path report steps; artifacts stay under F:\CI\Artifacts and
  are aged by Invoke-RetentionPolicy.ps1.
- build-nsInnoUnp.yml: release job reads
  F:\CI\Artifacts\{run_id}-{run_attempt}-{target} directly instead of
  download-artifact; existing Gitea REST release-asset upload unchanged.

Tradeoff (accepted): artifacts are no longer downloadable from the
Gitea Actions run page for non-tag builds — only on host disk, and as
release assets for tagged builds.
2026-05-17 16:42:36 +02:00
Simone dc14396832 fix(ci): lint must use an ephemeral venv, not the production one
The python lint job set VENV_DIR=F:\CI\python\venv (the shared
orchestrator venv) and ran `pip install -e ".[dev]"`. Every lint run
repointed ci_orchestrator at the lint job's transient checkout; once
act_runner cleaned that dir, all later smoke/build jobs failed with
"No module named ci_orchestrator". Use a job-local venv under
github.workspace, rebuilt fresh each run.
2026-05-17 15:44:36 +02:00
Simone 2e44eaadb9 fix(ci): write GITHUB_OUTPUT without BOM; harden artifact path
PowerShell 5.1 `Out-File -Encoding utf8` prepends a UTF-8 BOM. The
act_runner GITHUB_OUTPUT parser then read the key as "artifact-path",
so steps.invoke-ci.outputs.artifact-path resolved empty. Combined with
the trailing backslash, the upload path became "\" -> the F: drive root,
causing upload-artifact to ingest the entire drive (hundreds of GB of
unrelated files).

- Append outputs with UTF8Encoding($false) (no BOM).
- Throw if artifactPath is empty instead of emitting nothing.
- Drop the trailing backslash; use /*.log for the diagnostic glob.
2026-05-17 12:13:22 +02:00
Simone ea3e30403a fix(ci): downgrade artifact actions v4 -> v3 for Gitea compat
Gitea act_runner reports as GHES; @actions/artifact v2 (upload/
download-artifact@v4) uses the Twirp API Gitea does not implement,
failing with GHESNotSupportedError. v3 uses the artifact protocol
Gitea supports.
2026-05-17 11:56:40 +02:00
Simone 7bdafe8e59 ci: update artifact upload actions to use standard upload-artifact action 2026-05-17 02:15:36 +02:00
Simone 045d005024 ci: update artifact upload actions to use local repository references 2026-05-17 02:13:18 +02:00
Simone a18912233e ci: update action references to local-ci-cd-system in workflows and action files 2026-05-17 01:37:03 +02:00
Simone aebd308526 ci: sposta local-ci-build action in .gitea/actions/ 2026-05-17 00:45:43 +02:00
Simone 2da133b4b8 ci: sposta self-test.yml e build-nsInnoUnp.yml in .gitea/workflows 2026-05-17 00:29:11 +02:00
Simone e388bed8a6 ci: aggiungi workflow_dispatch (trigger manuale) a lint.yml 2026-05-17 00:23:56 +02:00
Simone 01c8011537 test: bump coverage gate from 80%% to 90%%
Update --cov-fail-under in lint workflow + docs (AGENTS, README, ARCHITECTURE). Note: A5 closeout reported 80.10%% so this run will likely fail until additional tests are added.
2026-05-14 23:04:56 +02:00
Simone 07b1ce222e ci(lint): use CI_PYTHON_LAUNCHER from runner config as single source of truth
Configure system Python path once in runner/config.yaml (runner.envs) instead of probing N candidate locations in the workflow. Workflow now fails fast with a clear error if the env is unset or points to a missing file. Document the new env in AGENTS.md.
2026-05-14 22:56:51 +02:00
Simone f93f9c1b7e ci(lint): add Python314 to launcher candidates (host has 3.14.5)
Reorder candidates to put C:\Program Files\Python314 first (verified install path on the production host). Drop py.exe -3.11 hint to plain -3 since host has only 3.14.
2026-05-14 22:53:16 +02:00
Simone 1b8298e208 ci(lint): probe multiple Python launcher locations for SYSTEM runner
act_runner SYSTEM context may not have py.exe or python.exe in PATH. Try a list of common install paths (C:\Python3XX, Program Files, LocalAppData) and allow override via CI_PYTHON_LAUNCHER env var.
2026-05-14 22:51:22 +02:00
Simone 7c054e21db ci(lint): fix broken-venv probe (AGENTS.md #12 stderr trap)
Native stderr from a broken python.exe shim ('No Python at ...') becomes a terminating exception under \Continue='Stop' BEFORE \0 can be read. Wrap the probe in try/catch + SilentlyContinue.
2026-05-14 22:50:29 +02:00
Simone 5736b5cb76 ci(lint): detect broken venv (stale base interpreter) and rebuild
The venv at F:\CI\python\venv may exist but be broken if its pyvenv.cfg points to a deleted base interpreter (e.g. a stale actions/setup-python tool_cache). Detect this by running 'python --version' and rebuild the venv with py.exe -3.11 if it fails.
2026-05-14 22:48:46 +02:00
Simone 04284e592e ci(lint): bootstrap venv via py.exe launcher; bump coverage to 80%
act_runner runs as SYSTEM and does not have plain 'python' in PATH; use py.exe launcher (-3.11) to bootstrap the venv when missing. The production venv at F:\CI\python\venv normally already exists, so the bootstrap is just a fallback. Also align coverage threshold to 80% (raised in A5, see AGENTS.md).
2026-05-14 22:46:13 +02:00
Simone 780a5eaa8d ci(lint): tweak comment header to trigger workflow re-run 2026-05-14 22:43:55 +02:00
Simone a8d7f0bfe9 ci(lint): drop actions/setup-python; use host Python in machine PATH
The runner's act_runner runs as SYSTEM, which only sees the Machine PATH.
Host has Python 3.14 installed at C:\Program Files\Python314\; once that
path is added to the machine PATH (one-time admin op) the simple
Get-Command python lookup works without network downloads.
2026-05-14 18:34:03 +02:00
Simone 2c7af6b39a ci(lint): update PSScriptAnalyzer invocation to use custom settings file 2026-05-14 18:34:02 +02:00
Simone 72bb5d26bb ci: remove Python setup step from lint workflow 2026-05-14 18:34:02 +02:00
Simone b7e3cc6143 ci(lint): use actions/setup-python to provision Python on runner
The act_runner service account doesn't have python in PATH. Delegating
to actions/setup-python@v5 which downloads/caches Python 3.11 reliably.

Also bump timeout-minutes 15 -> 20 to absorb first-run pip install.
2026-05-14 18:34:02 +02:00
Simone b08eb5af3f ci: move lint.yml to .gitea/workflows so Gitea Actions discovers it
Gitea Actions only scans .gitea/workflows/ and .github/workflows/. The
file under gitea/workflows/ (no leading dot) was never picked up. Other
files in gitea/workflows/ remain as templates copied into consumer repos.
2026-05-14 18:34:02 +02:00