[CI verification only — do not merge] integration/verify - #1
Closed
adamnfish-gu wants to merge 42 commits into
Closed
[CI verification only — do not merge] integration/verify#1adamnfish-gu wants to merge 42 commits into
adamnfish-gu wants to merge 42 commits into
Conversation
Projects declare their toolchain in a .tool-versions file and opt into CI simply by having one; the discover job finds them with `find` so nested projects like clojure/gol are picked up too. A conform job asserts that any project declaring a .tool-versions also provides executable script/setup and script/test, so a half-adopted project fails loudly rather than silently dropping out of the matrix. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
whereWeLive returned "Mars" while MainTest expected "Earth", so the skeleton shipped a failing test. Point them at the same answer. script/test ran `sbt ~test`, which watches for changes and never exits. Run the tests once by default and keep the watch loop behind --watch. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The test_unit_tests method contained self.assertTrue(False), which caused the suite to always fail non-interactively. Replaced with a meaningful assertion (name is non-empty) that demonstrates how to write a test against pairing_exercise.py while actually passing. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
pairingTest() returned false while the test expected true, causing CI to fail on every run. The test was also named 'a failing test', which gave no signal about what it actually tests. package.json had 'jest --watchAll' and script/test passed '--watch' on top of that, so the test runner never exited. Fixed by setting package.json's test script to plain 'jest' and giving script/test a --watch flag that uses --watchAll (no git detection needed). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The example test asserted result === true but mod.ts exported false. script/test ran deno test --watch, hanging non-interactively in CI. The import from deno.land/std@0.153.0 no longer resolves correctly on Deno 2; the std assert module moved to jsr:@std/assert. Updated deno.lock to reflect the new JSR dependency. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The project had a Yarn Classic v1 yarn.lock (# yarn lockfile v1 header) alongside .yarnrc.yml configured for Yarn Berry (nodeLinker, plugin path) and a .yarn/install-state.gz — a contradictory state that would confuse any toolchain. Sibling projects (javascript, javascript-esm) both use Yarn Berry 3 with __metadata: version 6 lockfiles, so converging here is the right call. Deleted the v1 yarn.lock and regenerated it with Yarn 3.8.7. Added a packageManager field to package.json to make the choice explicit and prevent it drifting back to Classic. Also fixed the deliberately-failing test (myConst was false, test expected true) and script/test which ran 'yarn test --watch' unconditionally — that never exits in CI. The test runner now does a single run by default and supports --watch behind an explicit flag. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The example test in spec/pairing_test_spec.rb asserts eq(false) but returnsFalse returned true, causing the suite to fail. The method name makes the intent clear: it should return false. Also removed the print "hello world" from Main#initialize: it ran on every test instantiation and polluted RSpec output with unwanted stdout. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
pairingTest() returned false while the test expected true, causing the suite to always fail. jest --watchAll in package.json and --watch in script/test also meant ./script/test never exited in CI. Changed pairingTest() to return true. Changed the test script to plain jest so it exits after one run, and rewrote script/test to support an explicit --watch flag for local development. Used --watch (not --watchAll) since this is a git repo and jest --watch works here. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The project failed to build entirely for three reasons: - No go.mod file; modern Go requires modules and rejects the GOPATH-era relative import './src' used in main.go. - main.go imported './src' which Go modules do not support. - SayHello() returned 'hi' but TestSimpleString expected 'hello'. Add go.mod with module path github.com/guardian/coding-exercise-project/go, fix the import to use the module-qualified path, return 'hello' from SayHello(), and switch script/test from 'pushd src && go test' to 'go test ./...' which works correctly from the module root. Also remove TestNothing (t.Skip stub) — a permanently-skipped test conveys nothing useful in a skeleton whose purpose is to show a passing suite. Replace println builtin (writes to stderr, not guaranteed stable) with fmt.Println which writes to stdout as expected. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pins the toolchain to swift 6 via .tool-versions so mise (or any asdf-compatible tool) can install the exact version without relying on manual swift.org download instructions. Adds script/setup (PATH check + swift package resolve), script/test (swift test), and script/start (swift run) following the scripts-to-rule-them-all convention. No watch mode: Swift has no idiomatic built-in watch mode in the CLI. Rewrites README to use the standard Prerequisites/Usage/Structure template, dropping the homebrew/XCode-only instructions and IDE section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Homebrew is no longer available in our standard CI environment, so setup was always failing on linux-arm64. Replacing brew/virtualenv with a mise-compatible .tool-versions declaration and the stdlib python3 -m venv means no external package manager is needed. Changes: - Add .tool-versions pinning python 3.13 - Rewrite script/setup: PATH check, then python3 -m venv venv - Simplify script/test: cd to project root, use venv/bin/python - Add script/start to run the exercise - Delete script/test.bat (superseded by mise on Windows) - Update README: remove homebrew reference and Windows section, document .tool-versions / mise workflow per template Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
.nvmrc contained 'lts/*' which is not a pinned version and requires nvm specifically. .tool-versions replaces it with explicit major versions for both node and yarn, compatible with mise, asdf, or any other tool manager. script/setup gained the standard PATH check so contributors get a clear error message with install instructions instead of a confusing 'command not found'. script/start is new: the project had no way to run the app from the standard scripts interface. README updated to document the toolchain and drop homebrew-specific instructions. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Pins the toolchain to deno 2 in .tool-versions so mise (or asdf) can install the exact runtime without relying on system packages or homebrew. Adds script/setup with a PATH check that prints a helpful message when deno is missing. Updates script/start and script/test to use set -euo pipefail and cd to the project root. Rewrites README to follow the shared template: prerequisites block, mise install snippet, standard Usage and Structure sections; removes the Windows-specific homebrew section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Gradle 6.8 cannot run on JDK 17+; Kotlin 1.5.31 is incompatible with Gradle 8.x; JUnit 4.12 predates the fix for CVE-2020-15250. Together these caused './gradlew test' to fail with an incompatible task-action signature error on any modern JVM. - Upgrade gradle wrapper to 8.11.1 - Upgrade Kotlin plugin to 2.0.21 and kotlin-stdlib - Upgrade JUnit to 4.13.2; kotlin-test-junit now pulls the right version - Switch from deprecated kotlinOptions.jvmTarget to jvmToolchain(21) - Replace deprecated mainClassName with application { mainClass = ... } - Remove 'java' plugin (redundant alongside Kotlin JVM plugin) - Remove JAVA_HOME / source-setup coupling from script/test and script/start Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The TargetFramework was set to netcoreapp10.0 which is not a valid TFM — the netcoreappX.Y scheme was retired after 3.1; .NET 10 uses net10.0. Both csproj files needed updating or the SDK refuses to build. TestFunction() returned false, causing the only test to fail on every run. Flipped it to true so the skeleton ships in a passing state. Assert.IsTrue is the NUnit 3 classic API; NUnit 4 dropped it. Replaced with Assert.That(..., Is.True) so the project compiles against NUnit 4.5.1. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Tests.php asserted assertSame(true, false) which always fails. code.php only echoed output with no return value, making it untestable. Expose a greeting() function and guard the direct invocation so code.php can be required without side effects; update the test to assert on the return value. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Clojure 1.6.0 (released 2014) does not run on JDK 21; upgraded to 1.11.1 which supports modern JVMs. Added :main gol.core for lein run and a -main entry point in gol.core so `lein run` works. The example test asserted (= 0 1) which always fails; replaced with a meaningful assertion that foo returns nil (println returns nil), matching the actual skeleton implementation in gol.core. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
setup was hunting macOS/Android Studio paths and interactively prompting to install adoptopenjdk11 via Homebrew — completely unusable in CI and on Linux. Replace with the standard PATH-check template that reads .tool-versions and directs the user to mise. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
No toolchain was pinned, setup relied on brew which does not work on linux-arm64 CI, and script/test lacked set -euo pipefail so failures could be silently swallowed. Pins dotnet 10 in .tool-versions, rewrites script/setup to check PATH instead of installing via brew, and brings script/test and script/start in line with the scripts-to-rule-them-all template. Adds --watch support (dotnet watch test is idiomatic in the ecosystem). Updates README to reflect mise-based setup and removes homebrew references. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
script/setup installed maven via brew, which only helped macOS users and mutated their machine. It now just resolves dependencies, leaving the install to whatever version manager the candidate prefers. script/test and script/run now cd to the project root so they work from any directory, matching the other skeletons. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaces the `brew install --cask guardian/devtools/gu-scala` step, which only worked on macOS and installed tools system-wide. script/setup now just runs `sbt update`, leaving the choice of version manager to the reader. The dependency on the toolchain is already encoded in that command, so there is nothing to keep in sync with .tool-versions. The Windows-only setup.ps1 goes too: mise covers Windows, so there is no longer a reason to maintain a second, divergent setup path. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The project had no .tool-versions file, no script/setup, and the existing scripts lacked set -euo pipefail and the canonical cd to project root. Without .tool-versions, cargo is unresolvable from a fresh environment and CI has no declared toolchain to install. Add .tool-versions pinning rust to major version 1, add script/setup that runs `cargo fetch`, and bring script/start and script/test up to the shared script template shape. Update README to use the standard prerequisites section and drop the old rustup installation-guide reference. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
script/setup now installs dependencies with yarn rather than assuming a working yarn is already present, and .nvmrc goes since .tool-versions supersedes it. script/start ran `yarn watch`, a tsc-watch loop that never exits, which made it the odd one out among the skeletons. It now compiles and runs once, with the watch loop behind --watch to match script/test. .yarn/install-state.gz was tracked despite the root .gitignore listing typescript-node/.yarn/* — it is a regenerated build artefact, so it only ever added diff noise. Untracked. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Brew-based setup was interactive and macOS-only; the Windows PowerShell script was a parallel divergent maintenance burden. Replace both with .tool-versions: script/setup bootstraps composer locally as composer.phar using the official installer with signature verification against the live sig from composer.github.io, then installs dependencies. Update script/test and script/start to use the local composer.phar. Drop setup.ps1. Update README to remove brew/Windows references and document .tool-versions. mise builds php from source, which needs system libraries the GitHub runner does not ship. script/system-packages installs them and is run before the toolchain is built, so it cannot live in script/setup. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Replaces the vendored lein bootstrap script, which self-installed Leiningen 2.5.1 into ~/.lein on first run. script/setup now just runs `lein deps`, leaving the install to whatever version manager the candidate prefers. Leiningen is pinned to 2.12 rather than the major version alone because mise's leiningen 2.13.0 package ships a lein script that still declares LEIN_VERSION=2.12.1-SNAPSHOT, so it 404s trying to fetch a jar that was never released. 2.12.0 installs and runs cleanly. Clojure was the only skeleton nested a directory deeper than the rest (clojure/gol), which forced CI to discover projects with find rather than a simple depth-1 glob. Unnest it to clojure/ so the layout matches every other project. The pairing test used to be Game of Life, which is where the gol name came from, but that is no longer the case and no other skeleton names a specific exercise. Rename the namespace to pairing.core and drop the Game of Life references from the README and project.clj. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ad-hoc setup used gem install bundler with set -vx (verbose tracing), which made output unreadable and tied the project to a specific bootstrap approach. Replace it with a plain bundle install, leaving the toolchain install to whatever version manager the candidate prefers. bundler has shipped as a default gem since Ruby 2.6, so requiring 'bundle' to be present once Ruby is installed is fair. Also: - Add .tool-versions pinning ruby 3.4 - Delete .ruby-version (superseded) - Tighten script/test: use set -euo pipefail and bundle exec - Update README to follow the standard template (drop homebrew references) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Ad-hoc .nvmrc with lts/* gave no pinned version and required nvm. Replaced with .tool-versions (node 22, yarn 3) for mise/asdf support. script/setup now just runs yarn, per the shared adoption spec. Removed Windows/homebrew instructions from README and added mise quickstart. Hardened script/start with set -euo pipefail and cd to project root. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
There was no declared toolchain version and script/setup used 'brew install go', which fails in CI and non-macOS environments. Add .tool-versions pinning Go to major version 1 and rewrite script/setup to run go mod download as the dependency-fetch step (a no-op here, but consistent with the template), leaving the toolchain install to whatever version manager the candidate prefers. Harden script/start with set -euo pipefail and BASH_SOURCE cd idiom. Add .gitignore covering the default 'go' binary produced by go build. Update README to follow the spec template: toolchain prerequisites, mise install quickstart, drop homebrew references. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Owner
Author
|
CI verification complete. Run 31085920406 passed on Closing — this PR existed only to trigger the run. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Temporary PR opened purely to trigger a CI run against the current
integration/verify(all 15 projects merged together).The workflow only triggers on push-to-main and pull_request, so a PR is the only way to exercise it without pushing to a main branch.
This will be closed once the run is green. Do not merge.