285 Commits

Author SHA1 Message Date
Eligio Mariño f81107fe7b feat: migrate docs/src from npm to pnpm (#460)
- Pin `pnpm = "11.2.2"` in `mise.toml` so the `docs/src` build uses a
manifest-pinned package manager, bringing the docs toolchain under the
`ci-runtime-tool-versioning` invariant alongside `cue`, `node`, `gx`,
and `git-cliff`.
2026-05-24 11:59:30 +02:00
Eligio Mariño b5ad245466 fix(ci): handle multi-version build-tools line in packages.txt (#459)
- Fix the `update_android_version` extractor in `update_version.yml`.
Flutter's `engine/src/flutter/tools/android_sdk/packages.txt` now lists
multiple `build-tools;X.Y.Z` entries on one comma-joined line
(`build-tools;36.1.0,build-tools;35.0.0,...:build-tools`), and the
previous `awk -F'[;:]' '{print $2}'` returned `36.1.0,build-tools`,
which failed `cue vet` one job downstream as
`android.buildTools.version: invalid value "36.1.0,build-tools"`. Anchor
`grep` to `^build-tools` and add `,` to the awk field separator so the
first (highest) version is picked cleanly.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 23:26:05 +02:00
Eligio Mariño 3fb14b4fab ci: migrate CUE/Node/gx/git-cliff installs to jdx/mise-action (#458)
- Replaces per-step `jaxxstorm/action-install-gh-release` and
`actions/setup-node` calls across 7 workflows with a single
`jdx/mise-action@v4` step that reads `mise.toml`. Tool versions now live
in one place — `cue`, `node`, `gx`, `git-cliff`.
2026-05-23 22:20:11 +02:00
Eligio Mariño 5bbeeb282a chore: archive p3, implement p4-cleanup, propose p6 (#457)
Bundles three openspec changes that converged on this branch:

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 14:50:52 +02:00
Eligio Mariño 008cce50a1 feat: pin Windows toolchain versions in config/version.json (#456)
- Extends the manifest-first discipline (already used for
Flutter/Android) to the Windows toolchain. `config/version.json` now
carries `windows.git`, `windows.vsBuildTools.cmakeProject`,
`windows.vsBuildTools.windows11Sdk.build`, and
`windows.vsBuildTools.vcTools`; `config/schema.cue` validates them via
new `#SemverQuad` and `#WindowsToolchain` definitions.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-22 20:07:24 +02:00
Eligio Mariño 87eb48fdc0 ci: parallelize image validation (#453)
- Splits the monolithic `test_image` job (~20m serial) into
`build_image` + parallel `test_image` (CST) and `scan_image` (Scout)
consumers — wall-clock drops to ~15m (~5m saved per PR).

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-18 22:21:33 +02:00
Eligio Mariño 6a853e8017 feat: implement p2 image handoff (#451)
Adds the handoff plumbing that future parallelized validation (p3) will consume.

- New `Compute handoff tag` step: emits `tag` (`pr-N` or `branch-<slug>`) and `is_fork` predicate.
- `Build image` step: `load: true` replaced with multi-line `outputs:` — emits both `type=docker` (local) and `type=registry,push=true,name=...` (registry) in a single buildx run. Registry output is gated on non-fork; multi-output requires buildx ≥ 0.13 (Feb 2024, stable).
- New `Save image as artifact` + `Upload image artifact` steps (fork-PR only): `docker save | gzip` → `actions/upload-artifact@v5` with `retention-days: 1`, `compression-level: 0`.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-13 22:51:44 +02:00
Eligio Mariño 08dcebad40 ci: switch build cache to GHCR registry backend (#449)
- Swaps `cache-from`/`cache-to` in `build.yml/test_image` from
`type=gha` to a GHCR registry tag at
`ghcr.io/<owner>/flutter-android:buildcache`.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-13 21:16:58 +02:00
Eligio Mariño 135de6f707 ci: unify runner disk cleanup across Linux and Windows (#448)
- Replaces the two drifting `clean-runner-disk` /
`clean-runner-disk-windows` composite actions with a single
OS-dispatched action at `.github/actions/clean-runner-disk/`.
- Swaps the Windows hot path from PowerShell `Remove-Item -Recurse

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-13 19:08:31 +02:00
Eligio Mariño 7d16500293 ci: make workflows fork-PR friendly by removing vars.FLUTTER_VERSION (#447)
Repository variables are not exposed to PRs from forks, so jobs that
reference vars.FLUTTER_VERSION at the container.image level fail to
resolve and the workflow template errors out before any step runs.
Replace it with a setup job that reads the latest published release tag
via the GitHub API using the read-only GITHUB_TOKEN, which is available
in fork-PR contexts.

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-12 22:18:25 +02:00
Eligio Mariño a7ebaa85a7 ci: skip secret-dependent steps on fork PRs (#446) 2026-05-12 18:43:40 +02:00
Eligio Mariño ae53ad7a4b feat(release): publish flutter-windows image; archive p1 (#443)
Two related units of work landing together:

**p2-release-windows-image** — adds a `release_windows` job to
`.github/workflows/release.yml` so that cutting a tag publishes
`flutter-windows:<flutter-version>` to Docker Hub, GHCR, and Quay.io
alongside the existing `flutter-android` image. Implementation details:

- Plain `docker build` with multiple `--tag`/`--label` flags parsed from
`docker/metadata-action` outputs, then `docker push` per
registry-prefixed tag. `docker/build-push-action` is not viable on
Windows containers ([issue
#18](https://github.com/docker/build-push-action/issues/18)) and
buildkit's experimental WCOW worker is not available on hosted runners.
**p1-fix-windows-ci-tests archive** — moves the completed change to
`openspec/changes/archive/2026-05-10-p1-fix-windows-ci-tests/` and
promotes the `windows-image-testing` capability spec to
`openspec/specs/`. Also picks up the refined `flutter doctor`
requirement merged from #442.

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-11 22:29:14 +02:00
Eligio Mariño b8b0869a57 docs: add DeepWiki integration (#444)
- Adds a DeepWiki badge to the README header (sourced in
`docs/src/badges.mdx`, compiled into `readme.md`) linking to
`https://deepwiki.com/gmeligio/flutter-docker-image`

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2026-05-11 19:15:29 +02:00
Eligio Mariño 792b91c445 ci: test windows image (#339)
- **`windows.Dockerfile`** — fixes the `COPY` source path from
`./test/Windows.Tests.ps1` to `./test/windows/Windows.Tests.ps1` (root
cause of the 12-month "in_progress forever" state); adds `COPY
./config/version.json` to the `test` stage; replaces the commented `CMD`
with a real `CMD` so `docker run`/`docker compose run` invokes Pester
without arguments.
- **`test/windows/Windows.Tests.ps1`** — fixes the `VC.CMake.Project`
pattern typo (`,versiona*` → `,version=*`) and standardises all three
VS-component patterns to `,version=*`; adds a `Flutter version` test
that reads `config/version.json` and asserts `flutter --version` inside
the container reports the same version; adds a `Flutter doctor` test
with a per-line parser (skip disabled platforms, fail on any non-`[✓]`
for Windows toolchain lines, fail on `[✗]` elsewhere).
- **`script/RunPester.ps1`** — forces `[Console]::OutputEncoding = UTF8`
so the `[✓]`/`[!]`/`[✗]` doctor glyphs survive the `windows-2025`
runner's default OEM codepage.
- **`test/windows/`** — deletes the dead `ory/dockertest` Go skeleton
(`main.go`, `main_test.go`, `go.mod`, `go.sum`) that was never wired
into CI and had its only meaningful assertion commented out.
- **`.github/workflows/windows.yml`** — deletes three commented-out
blocks (`Scan with Docker Scout`, `Push to Docker Hub`,
`validate_version` job referencing the deleted `config/version.cue`);
drops the now-unused elevated permissions (`packages: write`,
`pull-requests: write`, `security-events: write`).

---------

Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-10 16:15:33 +02:00
Eligio Mariño 40b632ca7f ci: update version.json from a single place (#375)
- Fixes a broken pipeline: the `single_update` branch had a
half-migrated step that pre-wrote `flutter_version.json` before the JS
comparator ran, causing every scheduled run to emit `result=false` and
skip all downstream jobs — meaning no update PRs were ever opened
- Replaces `script/updateFlutterVersion.js` with a single shell+jq step
that fetches `releases_linux.json`, reads the pinned version, compares,
and only writes when the upstream stable version actually changed
- Sources `android.buildTools.version` from Flutter's own
`engine/src/flutter/tools/android_sdk/packages.txt` at the new tag
(instead of being orphaned with no write path into `version.json`)
- Fixes `config/schema.cue` undefined reference (`#PatchVersion` →
`#SemverPatch`) that caused `cue vet` to fail
- Fixes `config/android.cue` length guard typo (`fileContentTests` →
`commandTests`)
- Fixes the PR creation step writing `commit_message` to `$GITHUB_ENV`
instead of `$GITHUB_OUTPUT`, which resulted in PRs with empty titles and
commit messages

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-09 15:35:48 +02:00
Eligio Mariño 846ffd66cb feat(ci): adopt gx for GitHub Actions version tracking (#439)
Adopts [`gmeligio/gx`](https://github.com/gmeligio/gx) (0.7.1) as the
source of truth for GitHub Actions versions in this repo:

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 17:31:26 +02:00
Eligio Mariño 2f9dd7c6ef ci: clean runner disk on ci.yml (#413) 2025-12-27 00:29:11 +01:00
Eligio Mariño 77ab19fca2 ci: clean runner disk (#412) 2025-12-26 19:08:05 +01:00
renovate[bot] 59d31d5a78 chore(deps): update github-actions (#404) 2025-12-09 19:47:12 +01:00
renovate[bot] 935ce4a44e chore(deps): update actions/checkout action to v6 (#405)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-12-08 14:19:01 +01:00
renovate[bot] 3ca7c2269c chore(deps): update all non-major dependencies (#388) 2025-11-18 18:51:32 +01:00
renovate[bot] 506923fb47 chore(deps): update mcr.microsoft.com/windows/servercore:ltsc2025 docker digest to 1126ba4 (#398)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-11-17 19:45:19 +01:00
verified-commit[bot] f4ef35fa9a chore(release): upgrade flutter to 3.38.0 (#397)
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-11-12 22:37:05 +01:00
Eligio Mariño 6b512de361 ci: use merge-multiple for multiple artifact IDs (#394)
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2025-11-02 12:49:29 +01:00
renovate[bot] 46c0c1e7df chore(deps): update github-actions (major) (#393)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-11-01 10:26:25 +01:00
renovate[bot] d917826c81 chore(deps): update github-actions (#384)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-10-08 08:48:50 +02:00
renovate[bot] 5520731ba6 chore(deps): update github-actions (major) (#385)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-10-06 21:53:39 +02:00
renovate[bot] 8940179326 chore(deps): update all non-major dependencies (#370)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
2025-10-02 08:51:40 +02:00
verified-commit[bot] 18b3e138b2 chore(release): update flutter dependencies in version.json for 3.35.4 (#381)
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-09-20 21:48:03 +02:00
renovate[bot] 719f1ee3c4 chore(deps): update github-actions (#368)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-08-01 22:14:15 +02:00
Eligio Mariño 2084aa62d7 ci: build image path to solve "skip output since it may contain secret" (#362) 2025-07-13 18:40:51 +02:00
renovate[bot] 56134b64af chore(deps): update node.js to v22.17.0 (#358)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-07-13 14:48:53 +02:00
renovate[bot] 67285c77fb chore(deps): update github-actions (#359)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-07-13 14:23:35 +02:00
Eligio Mariño e642c38317 ci: parse json before output (#354) 2025-06-14 17:58:29 +02:00
Eligio Mariño 6090f0667a ci: split release workflow into jobs (#352) 2025-06-14 15:25:44 +02:00
verified-commit[bot] 74248a1094 chore(release): update flutter dependencies in version.json for 3.32.2 (#350)
Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-06-12 07:49:15 +02:00
Eligio Mariño 6b9e03009d ci: add VERSION_MANIFEST to tag workflow (#349) 2025-06-06 09:16:32 +02:00
renovate[bot] 8ed6bdbb8b chore(deps): update github-actions (#346)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-06-01 11:48:11 +02:00
Eligio Mariño 9dba4d7096 ci: split into tag.yml and changelog.yml workflows (#347) 2025-06-01 11:24:27 +02:00
Eligio Mariño 2d63f3e6c7 chore(deps): update cue-lang/cue to v0.13.0 in workflows (#344) 2025-05-26 23:13:44 +02:00
Eligio Mariño 68282b8b36 ci: update artifact download configuration (#342) 2025-05-23 19:14:07 +02:00
renovate[bot] 4be9167733 chore(deps): update debian:12.10-slim docker digest to 4b50eb6 (#338)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-05-06 08:25:19 +02:00
renovate[bot] 71e04e3449 chore(deps): update actions/create-github-app-token action to v2 (#336) 2025-05-01 11:32:59 +02:00
Eligio Mariño bfda07a4a2 ci: download immutable artifact by id (#337) 2025-05-01 11:21:18 +02:00
renovate[bot] 3916010100 chore(deps): update github-actions (#335) 2025-05-01 10:35:09 +02:00
Eligio Mariño 7d44dbd91a ci: set tools digest to verify integrity (#331) 2025-04-28 08:17:44 +02:00
Eligio Mariño 76abd64c7a ci: generate changelog with git-cliff (#330) 2025-04-18 16:19:42 +02:00
verified-commit[bot] 472fc5d459 chore: update flutter dependencies in version.json for 3.29.3 (#329)
Automated changes by
[create-pull-request](https://github.com/peter-evans/create-pull-request)
GitHub action

---------

Co-authored-by: verified-commit[bot] <180343340+verified-commit[bot]@users.noreply.github.com>
Co-authored-by: Eligio Mariño <22875166+gmeligio@users.noreply.github.com>
2025-04-17 19:54:10 +02:00
Eligio Mariño 0e4f51c8f2 ci: path is a folder in download-artifact (#328) 2025-04-17 19:19:06 +02:00
Eligio Mariño a1142ffe96 ci: download-artifact can not overwrite existing files (#327) 2025-04-16 23:39:33 +02:00