lewagon/setup
Setup instructions for Le Wagon's students on their first day of AI Software Development Bootcamp
Missing license — unclear to depend on
worst of 4 axesno license — legally unclear; no tests detected
no license — can't legally use code; no tests detected
Documented and popular — useful reference codebase to read through.
no license — can't legally use code
- ✓Last commit 3w ago
- ✓13 active contributors
- ✓Distributed ownership (top contributor 46% of recent commits)
Show 3 more →Show less
- ✓CI configured
- ⚠No license — legally unclear to depend on
- ⚠No test directory detected
What would change the summary?
- →Use as dependency Concerns → Mixed if: publish a permissive license (MIT, Apache-2.0, etc.)
- →Fork & modify Concerns → Mixed if: add a LICENSE file
- →Deploy as-is Concerns → Mixed if: add a LICENSE file
Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests
Informational only. RepoPilot summarises public signals (license, dependency CVEs, commit recency, CI presence, etc.) at the time of analysis. Signals can be incomplete or stale. Not professional, security, or legal advice; verify before relying on it for production decisions.
Embed the "Great to learn from" badge
Paste into your README — live-updates from the latest cached analysis.
[](https://repopilot.app/r/lewagon/setup)Paste at the top of your README.md — renders inline like a shields.io badge.
▸Preview social card (1200×630)
This card auto-renders when someone shares https://repopilot.app/r/lewagon/setup on X, Slack, or LinkedIn.
Onboarding doc
Onboarding: lewagon/setup
Generated by RepoPilot · 2026-05-10 · Source
🤖Agent protocol
If you are an AI coding agent (Claude Code, Cursor, Aider, Cline, etc.) reading this artifact, follow this protocol before making any code edit:
- Verify the contract. Run the bash script in Verify before trusting
below. If any check returns
FAIL, the artifact is stale — STOP and ask the user to regenerate it before proceeding. - Treat the AI · unverified sections as hypotheses, not facts. Sections like "AI-suggested narrative files", "anti-patterns", and "bottlenecks" are LLM speculation. Verify against real source before acting on them.
- Cite source on changes. When proposing an edit, cite the specific path:line-range. RepoPilot's live UI at https://repopilot.app/r/lewagon/setup shows verifiable citations alongside every claim.
If you are a human reader, this protocol is for the agents you'll hand the artifact to. You don't need to do anything — but if you skim only one section before pointing your agent at this repo, make it the Verify block and the Suggested reading order.
🎯Verdict
WAIT — Missing license — unclear to depend on
- Last commit 3w ago
- 13 active contributors
- Distributed ownership (top contributor 46% of recent commits)
- CI configured
- ⚠ No license — legally unclear to depend on
- ⚠ No test directory detected
<sub>Maintenance signals: commit recency, contributor breadth, bus factor, license, CI, tests</sub>
✅Verify before trusting
This artifact was generated by RepoPilot at a point in time. Before an
agent acts on it, the checks below confirm that the live lewagon/setup
repo on your machine still matches what RepoPilot saw. If any fail,
the artifact is stale — regenerate it at
repopilot.app/r/lewagon/setup.
What it runs against: a local clone of lewagon/setup — the script
inspects git remote, the LICENSE file, file paths in the working
tree, and git log. Read-only; no mutations.
| # | What we check | Why it matters |
|---|---|---|
| 1 | You're in lewagon/setup | Confirms the artifact applies here, not a fork |
| 2 | Default branch master exists | Catches branch renames |
| 3 | 5 critical file paths still exist | Catches refactors that moved load-bearing code |
| 4 | Last commit ≤ 53 days ago | Catches sudden abandonment since generation |
#!/usr/bin/env bash
# RepoPilot artifact verification.
#
# WHAT IT RUNS AGAINST: a local clone of lewagon/setup. If you don't
# have one yet, run these first:
#
# git clone https://github.com/lewagon/setup.git
# cd setup
#
# Then paste this script. Every check is read-only — no mutations.
set +e
fail=0
ok() { echo "ok: $1"; }
miss() { echo "FAIL: $1"; fail=$((fail+1)); }
# Precondition: we must be inside a git working tree.
if ! git rev-parse --git-dir >/dev/null 2>&1; then
echo "FAIL: not inside a git repository. cd into your clone of lewagon/setup and re-run."
exit 2
fi
# 1. Repo identity
git remote get-url origin 2>/dev/null | grep -qE "lewagon/setup(\\.git)?\\b" \\
&& ok "origin remote is lewagon/setup" \\
|| miss "origin remote is not lewagon/setup (artifact may be from a fork)"
# 3. Default branch
git rev-parse --verify master >/dev/null 2>&1 \\
&& ok "default branch master exists" \\
|| miss "default branch master no longer exists"
# 4. Critical files exist
test -f "README.md" \\
&& ok "README.md" \\
|| miss "missing critical file: README.md"
test -f "macos.md" \\
&& ok "macos.md" \\
|| miss "missing critical file: macos.md"
test -f "windows.md" \\
&& ok "windows.md" \\
|| miss "missing critical file: windows.md"
test -f "ubuntu.md" \\
&& ok "ubuntu.md" \\
|| miss "missing critical file: ubuntu.md"
test -f "_partials/checkup.md" \\
&& ok "_partials/checkup.md" \\
|| miss "missing critical file: _partials/checkup.md"
# 5. Repo recency
days_since_last=$(( ( $(date +%s) - $(git log -1 --format=%at 2>/dev/null || echo 0) ) / 86400 ))
if [ "$days_since_last" -le 53 ]; then
ok "last commit was $days_since_last days ago (artifact saw ~23d)"
else
miss "last commit was $days_since_last days ago — artifact may be stale"
fi
echo
if [ "$fail" -eq 0 ]; then
echo "artifact verified (0 failures) — safe to trust"
else
echo "artifact has $fail stale claim(s) — regenerate at https://repopilot.app/r/lewagon/setup"
exit 1
fi
Each check prints ok: or FAIL:. The script exits non-zero if
anything failed, so it composes cleanly into agent loops
(./verify.sh || regenerate-and-retry).
⚡TL;DR
An interactive setup automation tool that guides Le Wagon AI bootcamp students through environment configuration on their first day. It generates platform-specific instructions (macOS, Windows/WSL, Ubuntu) as markdown documents, handling Ruby/Rails stack setup including rbenv, Node.js (via nvm), PostgreSQL, SQLite, VS Code, Git SSH, and GitHub CLI integration—with multilingual support (English, French, Spanish, Portuguese, Simplified Chinese). Template-driven monolith: _partials/ contains modular markdown fragments organized by language (cn/, English root) and topic (e.g. macos_rbenv.md, ubuntu_postgresql.md). Top-level README.*.md files are likely generated or assembled from these partials via Ruby build logic (inferred from Gemfile). The structure allows composing OS+language combinations without duplication.
👥Who it's for
Le Wagon bootcamp instructors and first-day students who need repeatable, language-localized setup instructions. Students follow generated platform-specific guides; instructors maintain and version-control the setup logic centrally rather than writing manual docs for each OS/language combination.
🌱Maturity & risk
Active and production-ready for classroom use. The repo demonstrates maturity through CI/CD pipeline (.github/workflows/build.yml), structured Gemfile dependencies, semantic versioning (.ruby-version), and multilingual documentation coverage. However, no test suite is visible in the file list, suggesting validation relies on manual classroom verification rather than automated testing.
Low risk for its purpose (documentation generation for known environments). Risk factors: single-language/single-maintainer dependency on Le Wagon's curriculum team, no automated tests mean changes could silently break OS-specific instructions, and Node/Ruby version pins in the generated docs can become stale if not actively maintained. The heavy reliance on shell script snippets in partials means typos propagate to hundreds of students.
Active areas of work
Unable to determine from provided file list (no recent commit history, open PRs, or issues visible). The presence of .github/workflows/build.yml suggests automated validation of markdown generation is running; the multilingual partials structure implies ongoing support for additional languages or platform updates.
🚀Get running
git clone https://github.com/lewagon/setup.git
cd setup
bundle install
# Review Rakefile or examine _partials/ to understand generation logic
bundle exec ruby build_script.rb # exact command inferred from Gemfile presence
Daily commands:
This is not a runnable application—it's a documentation generator/repository. To validate or regenerate guides: bundle install && bundle exec ruby [build-script] (exact entry point inferred from Gemfile). Students run the generated .md instructions manually on their machines.
🗺️Map of the codebase
README.md— Primary entry point that directs students to OS-specific setup guides; every new contributor must understand the multi-language structure and setup flow.macos.md— Main macOS setup guide for students; defines the canonical installation sequence and tool dependencies for the bootcamp.windows.md— Primary Windows setup guide including WSL2 configuration; critical for students on Windows platforms to bootstrap their environment.ubuntu.md— Ubuntu/Linux setup guide; essential reference for native Linux users and WSL installations on the bootcamp._partials/checkup.md— Verification checklist used across all language variants; ensures students validate their setup before starting coursework..github/workflows/build.yml— CI/CD pipeline that validates the setup documentation; prevents broken guides from being deployed to students.Gemfile— Ruby dependencies for building and validating documentation; defines toolchain for maintainers to process and test guides.
🛠️How to make changes
Add a new OS-specific installation step
- Create a new partial markdown file in _partials/ for the specific tool (e.g., _partials/tool_name.md) with step-by-step instructions (
_partials/tool_name.md) - Add the same tool documentation in all language folders: _partials/cn/, _partials/es/, _partials/fr/ with translations (
_partials/cn/tool_name.md) - Include the partial in the appropriate OS guide using markdown include syntax (typically in macos.md, windows.md, or ubuntu.md) (
macos.md) - Update the corresponding checkup partial to add verification steps for the new tool (
_partials/checkup.md)
Add setup instructions for a new language
- Create a new README file with language code suffix (e.g., README.ja.md) and link from main README.md (
README.md) - Create a new language folder in _partials/ (e.g., _partials/ja/) with all translated partial files copied from _partials/ (
_partials/ja/checkup.md) - Translate all partials in the new language folder; ensure macos.md, windows.md, and ubuntu.md equivalents are translated (
_partials/ja/macos_homebrew.md) - Add language selection link to main README.md pointing to the new README file (
README.md)
Update tool version or installation method
- Find and edit the relevant partial file for the tool (e.g., _partials/rbenv.md for Ruby version manager) (
_partials/rbenv.md) - Update all language variants of that partial in _partials/cn/, _partials/es/, _partials/fr/ directories (
_partials/cn/rbenv.md) - Review the OS guides (macos.md, windows.md, ubuntu.md) to ensure the updated partial is included correctly (
macos.md) - Update the checkup section in _partials/checkup.md to verify the new version or method works (
_partials/checkup.md)
🔧Why these technologies
- Markdown + Ruby/Jekyll — Static documentation that is easy to version control, translate, and serve; Ruby tools enable automation for validation and builds
- GitHub Actions CI/CD — Automates verification of guide validity before deployment; ensures broken instructions never reach students
- Multi-language structure with _partials/ — Reduces duplication across languages; allows translators to focus on content without restructuring the entire guide
- Bash/Shell scripts embedded in guides — Provides executable installation commands that students can copy-paste; direct interaction with system package managers
⚖️Trade-offs already made
-
Markdown source files (not HTML or compiled docs)
- Why: Enables GitHub rendering, easy git diffs for content changes, and contributor accessibility
- Consequence: Requires Jekyll or similar build tool to convert to final HTML; maintenance burden for tool version compatibility across locales
-
Separate guide files per OS (macos.md, windows.md, ubuntu.md) rather than one dynamic guide
- Why: Each OS has fundamentally different workflows (Homebrew vs apt vs WSL); clearer mental model for students
- Consequence: Higher maintenance burden when adding new tools; changes must be made to multiple files and language variants
-
Modular partial files (_partials/) rather than monolithic guides
- Why: Enables reuse across OS guides, cleaner version control, easier translation workflows
- Consequence: Build step required to assemble final guides; tooling complexity for maintainers
-
No interactive web UI or installer executable
- Why: Keeps repo lightweight, accessible, and maintainable by small team; GitHub rendering is sufficient
- Consequence: Students must manually follow text instructions; no progress tracking or conditional logic based on their system state
🚫Non-goals (don't propose these)
- Does not provide real-time technical support or debugging assistance beyond written guides
- Does not automate system configuration directly (no installation scripts that run without student approval)
- Does not track student progress or validate setup programmatically on student machines
- Does not support operating systems beyond macOS, Windows (via WSL2), and Ubuntu
- Does not provide IDE-specific advanced configuration or extensions beyond VS Code
🪤Traps & gotchas
- Multilingual sync risk: Updating a tool in English
_partials/requires manually updating all language variants in_partials/cn/,_partials/fr/, etc., or students get stale instructions. 2. Version pinning fragility: Shell snippets hardcode Ruby/Node/PostgreSQL versions (e.g.,rbenv install 3.1.0); versions become outdated rapidly without active CI checks. 3. No test coverage for generated guides: Shell commands in partials are not validated; a typo in_partials/macos_rbenv.mdwill silently fail for hundreds of students on day 1. 4. Platform-specific quirks hidden in snippets: macOS Apple Silicon, WSL2 vs WSL1, Ubuntu 20.04 vs 22.04 differences are baked into partials—easy to miss when updating.
🏗️Architecture
💡Concepts to learn
- Environment Version Management (rbenv, nvm) — Core to the setup: rbenv isolates Ruby versions per project (3.1.0 vs 3.2.0) and nvm does the same for Node. Learners must understand why these exist—to avoid 'works on my machine' problems in a cohort setting where everyone needs identical environments.
- Shell Script Composition & Idempotency — The
_partials/snippets are shell commands students copy-paste. Understanding idempotency (runningbrew install postgresqltwice should not break things) is crucial for debugging when students re-run setup. - macOS Apple Silicon (ARM64) vs Intel (x86) —
_partials/cn/macos_apple_silicon.mdand related partials reveal a critical hidden gotcha: M1/M2 Macs require different tool builds and Rosetta emulation for some packages. This is non-obvious and trips up new developers frequently. - Windows Subsystem for Linux (WSL2) Architecture — Windows students don't run natively; they run Linux inside WSL2. The setup treats Windows as a thin hypervisor layer, bootstrapping Ubuntu inside it. This fundamental architecture shift affects path handling, Docker, and GPU access.
- SSH Key Generation & GitHub CLI Authentication — Partials like
ssh_agent.mdandgh_cli.mdautomate credential setup so students can clone/push on day 1. Understanding pub/private key pairs and agent forwarding prevents auth headaches and security blunders. - Internationalization (i18n) via Directory Structure — No i18n library—localization is achieved by duplicating entire markdown trees (
_partials/cn/,_partials/fr/, etc.). This pattern trades simplicity for maintenance burden; contributors must understand this fragility to avoid broken translations. - Database System Initialization (PostgreSQL & SQLite Setup) — Partials like
ubuntu_postgresql.mdandmacos_postgresql.mdhandle not just package installation but also service startup, user creation, and socket configuration. Students need these services running before they can run the first Rails migrations.
🔗Related repos
rails/rails— Le Wagon bootcamp teaches Rails; this setup guide prepares the Rails environment (rbenv, PostgreSQL, VS Code). Rails conventions inform which tools are installed.nodejs/node— JavaScript/Node.js is part of the full-stack curriculum; this guide configures nvm and Node alongside Ruby.lewagon/data-setup— Likely sister repo for Le Wagon's Data Science bootcamp with equivalent multilingual setup instructions; demonstrates Le Wagon's pattern of language-localized onboarding.lewagon/dbt-setup— Probable Le Wagon setup guide for dbt/data engineering track; same architectural pattern (OS+language matrix of instructions).ohmyzsh/ohmyzsh— Oh My Zsh is installed in the setup (_partials/oh_my_zsh.md); this repo is the upstream source for shell customization logic students follow.
🪄PR ideas
To work on one of these in Claude Code or Cursor, paste:
Implement the "<title>" PR idea from CLAUDE.md, working through the checklist as the task list.
Add automated validation workflow for multilingual partial files consistency
The repo maintains setup guides in 5 languages (English, Chinese, Spanish, French, Portuguese) with corresponding partial files in _partials/cn, _partials/es, etc. There's no CI workflow to detect when new partials are added to the English version but missing from language-specific directories. This causes incomplete translations and confuses students. A GitHub Action could validate that all .md files in _partials/ exist in _partials/cn/, _partials/es/, etc., and fail the build if translations lag behind.
- [ ] Create .github/workflows/validate-translations.yml that runs on PR
- [ ] Script should compare files in _partials/ against _partials/cn/, _partials/es/, _partials/fr/, _partials/pt/
- [ ] Generate a report listing missing translated files and fail the workflow if any are found
- [ ] Document the translation workflow in CONTRIBUTING.md for future contributors
Create a translation status dashboard partial to display in all language README files
Currently, there's no way for contributors or students to quickly see which sections are up-to-date in each language. Create a shared _partials/translation_status.md (or language-specific versions) that lists completion percentage and last-updated dates for each language. This can be included at the top of README.md, README.cn.md, README.es.md, etc., to set expectations and encourage contributions.
- [ ] Create _partials/translation_status.md with a template table showing completion %
- [ ] Create language-specific versions: _partials/cn/translation_status.md, _partials/es/translation_status.md, etc.
- [ ] Add a section in each README file (README.md, README.cn.md, README.es.md, README.fr.md, README.pt.md) that includes the status table
- [ ] Document how to update the status in CONTRIBUTING.md
Add a Makefile or script to validate all markdown links and image references across language variants
With 5 language variants and extensive use of cross-references (e.g., links to macos.md, windows.md, ubuntu.md), there's risk of broken links when files are updated or moved. Currently, there's no CI check for this. Add a markdown link validator that checks all README files and partials to ensure referenced files exist and image paths (like images/apple_logo.png) are valid.
- [ ] Create a script (e.g., scripts/validate_links.sh or a Ruby script in lib/) that parses markdown files
- [ ] Validate that all referenced .md files exist (e.g., macos.md, windows.md, ubuntu.md, etc.)
- [ ] Validate that all image paths in markdown exist in the images/ directory
- [ ] Add this validation to .github/workflows/build.yml so it runs on every PR
🌿Good first issues
- Add automated validation: write a Ruby script in
lib/validate.rbthat parses shell commands in all_partials/**/*.mdfiles and checks syntax (e.g., validatecurlURLs are live,brew installpackage names exist). Integrate into.github/workflows/build.yml. - Create a sync checker: build a Rake task that warns when
_partials/[en].mdhas been updated but corresponding_partials/cn/*.md,_partials/fr/*.md, etc. have not been touched for 30+ days—flag for translator review. - Document the build process: write a
CONTRIBUTING.mdwith concrete examples (e.g., 'To add Slack setup for Ubuntu, edit_partials/ubuntu_slack.md, then update_partials/cn/ubuntu_slack.md'). The current file structure implies a build process that is not explicitly documented.
⭐Top contributors
Click to expand
Top contributors
- @invalid-email-address — 46 commits
- @ajdubovoy — 24 commits
- @julesvanrie — 11 commits
- @ElvisDot — 5 commits
- @helober2 — 4 commits
📝Recent commits
Click to expand
Recent commits
d425690— setup guides generated (invalid-email-address)f6c9f80— Do an audit for clarity (#507) (ajdubovoy)674ae5a— setup guides generated (invalid-email-address)a2b3645— [DNM] Upgrade to rails 8.1.1 (#499) (ajdubovoy)31e7b67— setup guides generated (invalid-email-address)cb5288c— Changed 2 confusing instructions (#506) (helober2)167bd97— setup guides generated (invalid-email-address)b300313— Changed 2 confusing instructions (#505) (helober2)6fd3f1c— setup guides generated (invalid-email-address)b34a26a— Changed 2 confusing instructions (helober2)
🔒Security observations
The repository is primarily a static documentation/setup guide for Le Wagon students with low inherent security risk. No hardcoded secrets, credentials, or injection vulnerabilities were identified in the visible file structure. The codebase consists mainly of markdown documentation files and configuration templates. Primary recommendations focus on CI/CD pipeline security hardening, dependency scanning integration, and security headers if deployed as a website. Overall security posture is good for a documentation repository, with minor improvements recommended around automated vulnerability detection.
- Low · No dependency lock file verification visible —
.github/workflows/build.yml. While Gemfile.lock is present, there is no evidence of dependency vulnerability scanning tools (e.g., bundler-audit, Dependabot) configured in the visible workflow files. This could allow vulnerable gems to be used without detection. Fix: Integrate dependency vulnerability scanning tools like Dependabot or bundler-audit into CI/CD pipeline to automatically detect and alert on vulnerable dependencies. - Low · No security headers configuration visible —
Repository root (static site configuration). The repository appears to be documentation/setup guides without a web application component. However, if deployed as a website, security headers would be important for protection against XSS, clickjacking, and MIME-sniffing attacks. Fix: If this repository is served as a website, configure security headers (Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Strict-Transport-Security) in the server configuration or build pipeline. - Low · Limited visibility into workflow security —
.github/workflows/build.yml. The .github/workflows/build.yml file is referenced but its contents are not provided. CI/CD pipelines can introduce security risks if not properly configured (e.g., exposed secrets, insecure permissions, untrusted dependencies). Fix: Review the workflow file for: 1) Proper secrets management (never hardcode credentials), 2) Minimal required permissions, 3) Pinned action versions, 4) No use of 'permissions: write-all', 5) Secure handling of build artifacts.
LLM-derived; treat as a starting point, not a security audit.
👉Where to read next
- Open issues — current backlog
- Recent PRs — what's actively shipping
- Source on GitHub
Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.