Skip to content

Banner redesign, connect-repo wrapper, and first launcher CI - #50

Merged
davidkane9 merged 6 commits into
mainfrom
banner-redesign
Aug 22, 2026
Merged

Banner redesign, connect-repo wrapper, and first launcher CI#50
davidkane9 merged 6 commits into
mainfrom
banner-redesign

Conversation

@davidkane9

Copy link
Copy Markdown
Contributor

Student-facing:

  • The ready banner shows one action: connect-repo <insert-repo-name> — welcome.sh installs the connect-repo wrapper into ~/.local/bin at attach (works from any folder; long form still works).
  • Guide link and clear-hint removed; instructor-facing provenance line moved above the box.
  • connect-repo.sh help/usage and STUDENT_WORKFLOW.md teach the short command.

Infrastructure:

  • First CI for this repo: launcher-tests runs 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

davidkane9 and others added 2 commits August 19, 2026 22:54
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>
Copilot AI lite review requested due to automatic review settings August 20, 2026 02:54

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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-repo exec-wrapper into ~/.local/bin at attach time; update help/usage text and student docs to teach the short command.
  • Add launcher-tests GitHub 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 thread .devcontainer/welcome.sh
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>
@davidkane9

Copy link
Copy Markdown
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.

davidkane9 and others added 3 commits August 20, 2026 07:07
…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>
@davidkane9
davidkane9 merged commit 29ac06d into main Aug 22, 2026
3 checks passed
@davidkane9
davidkane9 deleted the banner-redesign branch August 22, 2026 10:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants