# Ephemere A collection of ephemeral scripts for various tasks, written in TypeScript, Python, and Bash. ## Project Structure ``` . ├── typescript/ # TypeScript scripts │ └── src/ │ ├── crowdin/ # Crowdin translation management │ ├── discord/ # Discord bot utilities │ ├── discourse/ # Discourse forum management │ ├── gitea/ # Gitea bulk repository operations │ ├── github/ # GitHub API interactions │ ├── music/ # Music file metadata tools │ ├── s3/ # S3-compatible object storage │ ├── security/ # Security analysis and reporting │ └── utils/ # Shared utilities ├── python/ │ └── cohort/ # NHCarrigan cohort programme management ├── bash/ │ ├── cohort/ # GitHub team management for cohorts │ └── yubikey/ # YubiKey SSH key and permission utilities ├── data/ # Input/output data files (gitignored) ├── prod.env # 1Password vault references (safe to commit) ├── run.sh # Interactive script runner └── Makefile # Build and utility commands ``` ## Setup ### Prerequisites - Node.js (v24+) with nvm - Python 3.10+ - pnpm 10.15.0+ - uv (Python package manager) - 1Password CLI (`op`) — for secret injection into TypeScript and Python scripts - `gh` CLI — for Bash scripts that manage GitHub teams - `ykman` and `yubico-piv-tool` — for YubiKey Bash scripts ### Installation Install all dependencies (TypeScript and Python): ```bash make install ``` Or install individually: ```bash make install-ts # TypeScript dependencies only make install-py # Python dependencies only ``` ## Running Scripts The recommended way to run any script is the interactive runner: ```bash make run ``` This launches a menu to select a language (TypeScript, Python, or Bash), then a category, then a specific script. TypeScript and Python scripts have secrets injected automatically from `prod.env` via 1Password CLI. Bash scripts are run directly. To run a script directly without the interactive runner: ```bash # TypeScript cd typescript && op run --env-file=../prod.env -- pnpm tsx src//