Banner redesign, connect-repo wrapper, and first launcher CI - #50
Merged
Conversation
Banner (welcome.sh): provenance line (image pin + setup date) moves ABOVE
the box — it is instructor-facing; the guide link and the clear-hint are
removed; the box now shows exactly one action:
connect-repo <insert-repo-name>
welcome.sh installs that wrapper into ~/.local/bin (already on PATH via
the image's profile edits) on every attach. An exec wrapper, not a
symlink: connect-repo.sh self-locates via BASH_SOURCE, which a symlink
would break. The wrapper works from any folder, including the student's
own repo; the long-form invocation still works.
connect-repo.sh --help/usage text and STUDENT_WORKFLOW.md now teach the
short command; devcontainer.json's stale banner comment corrected.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
First CI for this repo. A pin job reads the image tag LIVE from devcontainer.json (so this is NOT a sixth pin location), then the test job runs .devcontainer/tests/launcher-tests.sh inside that image: banner content (present/absent/retired lines), wrapper install and foreign-directory execution, usage-error path, marker silence, and .bashrc idempotency. Out of scope by design: anything needing a GitHub login (connect-repo's real work stays a manual live-Codespace check). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Pull request overview
This PR updates the student onboarding experience (banner + connect-repo short command) and adds a first CI workflow that validates the launcher behavior inside the same pinned student devcontainer image.
Changes:
- Redesign the “Codespace is ready” banner to show a single next action (
connect-repo <name>) and move instructor-facing provenance above the box. - Install a
connect-repoexec-wrapper into~/.local/binat attach time; update help/usage text and student docs to teach the short command. - Add
launcher-testsGitHub Actions workflow + a bash test script to assert banner/wrapper/usage behaviors inside the student image.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| .github/workflows/launcher-tests.yml | Adds CI to run launcher tests inside the pinned student image. |
| .devcontainer/welcome.sh | Installs connect-repo wrapper and updates the ready banner/provenance placement. |
| .devcontainer/tests/launcher-tests.sh | Adds CI-style assertions for banner output, wrapper behavior, and idempotency. |
| .devcontainer/STUDENT_WORKFLOW.md | Updates student instructions/examples to use connect-repo short form. |
| .devcontainer/devcontainer.json | Updates comments describing the new banner behavior and wrapper installation. |
| .devcontainer/connect-repo.sh | Updates usage/help text to present the short-form connect-repo invocation. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+31
to
+34
| img="$(grep -o 'ghcr\.io/ppbds/devcontainer:[0-9][0-9.]*' .devcontainer/devcontainer.json | head -1)" | ||
| test -n "$img" | ||
| echo "image=$img" >> "$GITHUB_OUTPUT" | ||
| echo "testing against $img" |
Comment on lines
105
to
109
| if [[ ! -f "$marker" ]]; then | ||
| [[ -n "$prov" ]] && printf '\n%s\n' "$prov" | ||
| cat <<BANNER | ||
|
|
||
| ════════════════════════════════════════════════════════════ |
- welcome.sh: the banner advertises `connect-repo` only when the wrapper actually landed executable; otherwise it falls back to the long-form command. The script is deliberately non-fatal, so a failed install must not leave the banner teaching a command that won't work. - launcher-tests: failure-injection test ($HOME/.local/bin as a regular file) proving the fallback both appears and suppresses the short form. - workflow: pin-extraction failure now emits an explicit ::error with the file and likely cause instead of dying on a bare test(1). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Contributor
Author
|
Both review comments addressed in eda24fb: the banner now verifies the wrapper is executable and falls back to the long-form command otherwise (with a failure-injection test proving both directions), and the pin-extraction step fails with an explicit ::error message. |
…kflow ms-python.python and ms-toolsai.jupyter removed (David, 2026-08-20): students use only Explorer, Search, Source Control, Extensions, and R Tutorials, and these two contributed Python/Jupyter icons plus Welcome walkthrough cards for tooling the course doesn't teach interactively. The Python workflow that matters survives — `quarto render` drives the image's Jupyter engine from the CLI with no editor extension — and the in-editor notebook/IntelliSense layer is what's dropped. The two python.* settings that existed solely for the extension go with it (restore-from-git-history pointers left in comments). Side effect: the Python source of the first-terminal relaunch warning disappears too. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
- postAttachCommand key renamed so the tab reads "Codespaces: Welcome!" (the platform prefix is not removable; noted in the comment). - New shellcheck job on the plain runner enforces the repo's stated shell convention, honored but unenforced until now. All three scripts were clean when added; it promptly flagged the one intentional SC2016 in the new assertion, now waived inline with a reason. - Test asserts the postAttachCommand key, guarding the label from a silent revert (the label itself is platform-applied, so this is the most CI can see). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Image v1.1.4 rebakes the four PPBDS packages from GitHub HEAD — misc. tutorials' R4DS clean-up and the vscode.tutorials updates (devcontainers #33). Confirmed on GHCR before this bump. Kept on the branch deliberately: merging this pin is what puts students on 1.1.4, and that is Friday's decision. Landing it here also lets the launcher-tests CI validate this PR's new banner and wrapper inside the image students will actually get. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
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.
Student-facing:
connect-repo <insert-repo-name>— welcome.sh installs theconnect-repowrapper into~/.local/binat attach (works from any folder; long form still works).Infrastructure:
launcher-testsruns welcome.sh + the wrapper inside the pinned student image (tag read live from devcontainer.json — not a new pin location) and asserts banner/wrapper/usage behavior. 10 assertions, all green locally in a sandboxed-HOME dry run.🤖 Generated with Claude Code