RepoPilotOpen in app →

lewagon/setup

Setup instructions for Le Wagon's students on their first day of AI Software Development Bootcamp

Mixed

Missing license — unclear to depend on

worst of 4 axes
Use as dependencyConcerns

no license — legally unclear; no tests detected

Fork & modifyConcerns

no license — can't legally use code; no tests detected

Learn fromHealthy

Documented and popular — useful reference codebase to read through.

Deploy as-isConcerns

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 →
  • CI configured
  • No license — legally unclear to depend on
  • No test directory detected
What would change the summary?
  • Use as dependency ConcernsMixed if: publish a permissive license (MIT, Apache-2.0, etc.)
  • Fork & modify ConcernsMixed if: add a LICENSE file
  • Deploy as-is ConcernsMixed 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.

RepoPilot: Great to learn from
[![RepoPilot: Great to learn from](https://repopilot.app/api/badge/lewagon/setup?axis=learn)](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:

  1. 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.
  2. 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.
  3. 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 |

<details> <summary><b>Run all checks</b> — paste this script from inside your clone of <code>lewagon/setup</code></summary>
#!/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).

</details>

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

  1. 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)
  2. Add the same tool documentation in all language folders: _partials/cn/, _partials/es/, _partials/fr/ with translations (_partials/cn/tool_name.md)
  3. Include the partial in the appropriate OS guide using markdown include syntax (typically in macos.md, windows.md, or ubuntu.md) (macos.md)
  4. Update the corresponding checkup partial to add verification steps for the new tool (_partials/checkup.md)

Add setup instructions for a new language

  1. Create a new README file with language code suffix (e.g., README.ja.md) and link from main README.md (README.md)
  2. Create a new language folder in _partials/ (e.g., _partials/ja/) with all translated partial files copied from _partials/ (_partials/ja/checkup.md)
  3. Translate all partials in the new language folder; ensure macos.md, windows.md, and ubuntu.md equivalents are translated (_partials/ja/macos_homebrew.md)
  4. Add language selection link to main README.md pointing to the new README file (README.md)

Update tool version or installation method

  1. Find and edit the relevant partial file for the tool (e.g., _partials/rbenv.md for Ruby version manager) (_partials/rbenv.md)
  2. Update all language variants of that partial in _partials/cn/, _partials/es/, _partials/fr/ directories (_partials/cn/rbenv.md)
  3. Review the OS guides (macos.md, windows.md, ubuntu.md) to ensure the updated partial is included correctly (macos.md)
  4. 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

  1. 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.md will 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 (running brew install postgresql twice 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.md and 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.md and gh_cli.md automate 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.md and macos_postgresql.md handle 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.
  • 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.rb that parses shell commands in all _partials/**/*.md files and checks syntax (e.g., validate curl URLs are live, brew install package names exist). Integrate into .github/workflows/build.yml.
  • Create a sync checker: build a Rake task that warns when _partials/[en].md has 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.md with 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

📝Recent commits

Click to expand
  • 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.


Generated by RepoPilot. Verdict based on maintenance signals — see the live page for receipts. Re-run on a new commit to refresh.

Mixed signals · lewagon/setup — RepoPilot