Skip to main content

CLI tools for setting up and retiring GitHub-backed course repositories

Project description

course-setup

CLI tools for setting up and retiring GitHub-backed course repositories.

Installation

pip install course-setup

Or with uv:

uv pip install course-setup

Configuration

Run the config generator to create a starter config file:

setup-course-config

This creates ~/.config/course-setup/config.toml:

[github]
token = "ghp_YOUR_TOKEN_HERE"

[paths]
archive = "/path/to/your/archive"

[defaults]
notebook_type = "jupyter"   # or "marimo"

Edit the file to fill in your GitHub personal access token and archive path.

Alternatively, you can set the GITHUB_TOKEN environment variable instead of putting the token in the config file.

Use --force to overwrite an existing config:

setup-course-config --force

Usage

setup-course — Create a new course repo

setup-course -d 2026-03-18 -c Acme -r acme-python-2026

Options:

Flag Description
-d, --date Course date (required)
-c, --client Client name (required)
-r, --repo GitHub repo name to create (required)
-n, --name Optional name suffix (e.g. advanced)
--notebook-type jupyter or marimo (overrides config default)

This will:

  1. Copy the bundled course template to a new directory named {client}-{date}[-{name}]
  2. Create a Jupyter notebook (.ipynb) or Marimo notebook (.py) based on the notebook type
  3. Generate a pyproject.toml with the appropriate notebook dependency and gitautopush
  4. Create a public GitHub repo and configure the local .git/config remote

retire-course — Archive a course repo

retire-course -d ./Acme-2026-03-18

Options:

Flag Description
-d, --dirname Path to the course directory to retire (required)

This will:

  1. Make the GitHub repo private
  2. Move the local directory to your configured archive path under the current year

Development

git clone https://github.com/reuven/course-setup.git
cd course-setup
uv sync --dev

Run tests:

uv run pytest

Format and lint:

uv run black src/ tests/
uv run ruff check src/ tests/
uv run mypy --strict src/

License

MIT — see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

course_setup-1.0.0.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

course_setup-1.0.0-py3-none-any.whl (25.5 kB view details)

Uploaded Python 3

File details

Details for the file course_setup-1.0.0.tar.gz.

File metadata

  • Download URL: course_setup-1.0.0.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for course_setup-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a014ebf6ca4812c667d64aff4ddbbdc9f30659d18e7b871705523b41f757e588
MD5 8ef63517e65823a7c125f39574cc67da
BLAKE2b-256 ea0d5c49d2c34a79a216a364dd833e7a469981c0bced4a1f043ed567ddac3328

See more details on using hashes here.

File details

Details for the file course_setup-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: course_setup-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 25.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.11 {"installer":{"name":"uv","version":"0.10.11","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for course_setup-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e2bd6f9bc46e2daeb87992d38aee6d7ea01e2fcf257eec378e636303e1000854
MD5 fa9e67bb5eceefc5d01001029239da31
BLAKE2b-256 cf5bb0cc5dd37a967c07627c998134fc5e5bc01ed295ca6ed6a8d4c26a6c11c8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page