hikari ec58c9c843
CI / dependency-pin-check-typescript (push) Successful in 5s
CI / dependency-pin-check-python (push) Successful in 4s
CI / python (push) Successful in 9m28s
CI / typescript (push) Successful in 9m42s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m39s
feat: reorganise bash scripts and add comprehensive documentation (#6)
## Summary

This PR completes the bash script restructuring and adds comprehensive documentation across all script categories.

### Bash Restructuring

- Moved cohort shell scripts (`remove_github_members.sh`, `update_github_teams.sh`) from `python/cohort/` into a new `bash/cohort/` directory
- Moved existing bash utilities (`add-keys-to-git.sh`, `fix-yubikey-perms.sh`, `list-yubikey-ssh-keys.sh`) into a new `bash/yubikey/` subdirectory
- Updated `run.sh` to support **Bash** as a third language option alongside TypeScript and Python
  - Bash scripts are run directly (no 1Password secret injection needed)
  - Category discovery and script listing works the same as for TS/Python
  - Removed dead "Root Scripts" logic that was no longer needed

### Documentation

Added `README.md` files for all script categories that were missing them:

- `bash/cohort/README.md` — cohort GitHub team management scripts
- `bash/yubikey/README.md` — YubiKey SSH key and permission utilities
- `typescript/src/crowdin/README.md` — Crowdin translation management scripts
- `typescript/src/discord/README.md` — Discord bot utility scripts
- `typescript/src/discourse/README.md` — Discourse forum management scripts
- `typescript/src/gitea/README.md` — Gitea bulk repository operation scripts
- `typescript/src/github/README.md` — GitHub API interaction scripts
- `typescript/src/music/README.md` — Music file metadata tools
- `typescript/src/s3/README.md` — S3-compatible object storage scripts
- `typescript/src/security/README.md` — Security analysis and reporting scripts
- `python/cohort/README.md` — Updated to remove moved shell scripts, fix usage commands

Also updated project-level docs:

- **`README.md`** — Corrected project structure, fixed running instructions (removed references to non-existent `make run-ts`/`make run-py` targets), added Bash prerequisites
- **`CLAUDE.md`** — Updated project overview, structure, development standards, and script-adding guides to reflect the current state of the project

 This PR was created with help from Hikari~ 🌸

Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com>
Reviewed-on: #6
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
2026-02-23 20:18:41 -08:00
2026-01-08 18:36:53 -08:00
2025-08-27 12:20:04 -07:00
2025-12-22 19:17:17 +01:00
2025-08-27 12:20:04 -07:00
2025-08-27 12:20:04 -07:00
2025-08-27 12:20:04 -07:00
2025-08-27 12:20:04 -07:00
2026-02-03 11:03:18 -08:00
2025-08-27 12:20:04 -07:00
2025-08-27 12:20:04 -07:00

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):

make install

Or install individually:

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:

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:

# TypeScript
cd typescript && op run --env-file=../prod.env -- pnpm tsx src/<category>/<script>.ts

# Python
cd python && op run --env-file=../prod.env -- uv run python cohort/<script>.py

# Bash
bash bash/<category>/<script>.sh

Each category has its own README.md with details on every script, its required environment variables, and data file formats.

Development

Linting and Formatting

make lint           # Run all linters (TypeScript and Python)
make lint-ts        # TypeScript linter only
make lint-py        # Python linter only
make build          # TypeScript type check
make format         # Format Python code
make format-check   # Check Python formatting without modifying
make test           # Run tests
make clean          # Clean build artifacts and caches
make help           # Show all available commands

Secrets Management

This project uses 1Password CLI for secrets management. The prod.env file contains 1Password vault references (e.g. op://Private/Discord/token) rather than real values, making it safe to commit.

The interactive runner (make run) handles secret injection automatically. To run a script manually with secrets:

op run --env-file=prod.env -- <command>

Feedback and Bugs

If you have feedback or a bug report, please log a ticket on our forum.

Contributing

If you would like to contribute to the project, you may create a Pull Request containing your proposed changes and we will review it as soon as we are able! Please review our contributing guidelines first.

Code of Conduct

Before interacting with our community, please read our Code of Conduct.

License

This software is licensed under our global software license.

Copyright held by Naomi Carrigan.

Contact

We may be contacted through our Chat Server or via email at contact@nhcarrigan.com.

S
Description
App for running one-off or occasionally recurring scripts across various platforms.
Readme 365 KiB
Languages
Python 47.9%
TypeScript 45.6%
Shell 5.4%
Makefile 1%