Your central hub for learning, monitoring, and contributing to any GitHub organization's repositories.
π Need detailed information? See docs/EMBABEL-WORKFLOW.md for comprehensive guides on PR reviews, contribution tracking, session notes, and more.
First-time setup: This workspace is now generic and works with any GitHub organization!
- Copy and configure:
cp .env-template .env # Edit .env with your settings: # - YOUR_GITHUB_USER: Your GitHub username # - UPSTREAM_ORG: The organization you want to monitor # - BASE_DIR: Where you clone repositories (default: $HOME/github/YOUR_GITHUB_USER) # - MONITOR_REPOS: Optional - specific repos to monitor (space-separated)
-
Copy and configure:
cp config.sh.example config.sh # Edit config.sh with your settings (same variables as .env) -
The workspace will use these defaults if neither
.envnorconfig.shis found:UPSTREAM_ORG=embabelYOUR_GITHUB_USER=jmjavaBASE_DIR=~/github/jmjava
Note: A warning will be shown when using defaults. Create
.envorconfig.shto customize.
Important: The
.envfile is git-ignored and should never be committed. It contains user-specific settings.
See CONFIGURATION.md for detailed configuration options.
| What You Want to Do | Command |
|---|---|
| Check what needs attention | eactions |
| Check if repos are in sync | esyncstatus all |
| Sync repositories | esync |
| Reset fork to upstream | ereset <repo-name> |
| Safe push (with checks) | epush |
| Review a PR | epr <repo-name> <pr-number> |
| Daily monitoring | em |
| List all repos | elist |
| Your contributions | emy |
| Generate weekly notes | eweek |
| Generate daily checklist | echecklist |
| Catch up after break | ecatchup |
| Embabel repo summaries | esummary |
# 1. Configure for your organization (REQUIRED for first-time setup)
cd /path/to/organization-learning # or clone this repo
cp .env-template .env # Recommended: use .env file
# Or: cp config.sh.example config.sh # Alternative: use config.sh
# Edit .env (or config.sh) with YOUR_GITHUB_USER and UPSTREAM_ORG
# 2. Set up convenient aliases
source scripts/setup-aliases.sh
source ~/.bash_aliases
# 3. List all organization repos and their status
elist
# 4. Fork all organization repositories
efork
# 5. Clone the repos you want to work with
eclone
# 6. Set up upstream tracking
scripts/setup-upstreams.sh
# 7. Set up pre-commit hooks and GitGuardian (recommended)
./scripts/setup-pre-commit.sh
# 8. Start monitoring daily
emConfiguration required: Make sure to create
.envfrom.env-template(orconfig.shfromconfig.sh.example) before running the scripts. See CONFIGURATION.md for details.
embabel-learning/
βββ scripts/ # All automation scripts
β βββ list-embabel-repos.sh # List all repos with fork/clone status
β βββ fork-all-embabel.sh # Fork all embabel repositories
β βββ clone-embabel-repos.sh # Clone your forked repos
β βββ setup-upstreams.sh # Configure upstream remotes
β βββ monitor-embabel.sh # Daily monitoring (PRs, releases, commits)
β βββ sync-upstream.sh # Sync your fork with upstream
β βββ compare-branches.sh # Compare your changes with upstream
β βββ view-pr.sh # Analyze specific PRs
β βββ setup-aliases.sh # Install convenient shell aliases
β βββ setup-pre-commit.sh # Setup pre-commit & GitGuardian
βββ docs/ # Documentation
β βββ EMBABEL-WORKFLOW.md # Complete detailed workflow guide
βββ notes/ # Your personal learning notes
β βββ session-notes/ # Weekly notes and catch-up summaries
β βββ my-contributions/ # Your PR and contribution tracking
β βββ discussions/ # PR discussion briefs
βββ .pre-commit-config.yaml # Pre-commit hooks configuration
βββ .yamllint.yml # YAML linting rules
βββ .secrets.baseline # Secrets detection baseline
βββ .gitignore # Git ignore rules
| Script | Alias | Description |
|---|---|---|
list-embabel-repos.sh |
elist |
Show all organization repos with fork/clone status |
fork-all-embabel.sh |
efork |
Fork all organization repos you haven't forked yet |
clone-embabel-repos.sh |
eclone |
Clone your forked repositories |
setup-upstreams.sh |
- | Configure upstream remotes for tracking |
| Script | Alias | Description |
|---|---|---|
monitor-embabel.sh |
em |
Check PRs, releases, commits across configured repos |
sync-upstream.sh |
esync |
Sync your fork with upstream changes (use esync <repo-name> or esync all) |
compare-branches.sh |
ecompare |
Compare your fork with upstream (use ecompare <repo-name> or ecompare all) |
view-pr.sh |
epr |
Deep dive into a specific PR (use epr <repo-name> <pr-number>) |
| Script | Alias | Description |
|---|---|---|
my-contributions.sh |
emy |
Find ALL your PRs and commits across repos |
review-my-pr.sh |
ereview |
Quick review of your specific PR |
prep-for-discussion.sh |
eprep |
Create discussion brief for a PR |
| Script | Alias | Description |
|---|---|---|
list-action-items.sh |
eactions |
List all actionable items (PRs, syncs, releases, etc.) |
generate-weekly-notes.sh |
eweek |
Auto-generate weekly session notes with action items |
generate-catch-up.sh |
ecatchup |
Auto-generate catch-up summary with current status |
generate-daily-checklist.sh |
echecklist |
Generate daily learning checklist from workflow guide |
| Script | Alias | Description |
|---|---|---|
check-sync-status.sh |
esyncstatus |
Check repository sync status with clear fixes |
review-pr-workflow.sh |
ereview |
Step-by-step PR review workflow (keeps IDE in sync) |
reset-to-upstream.sh |
ereset |
Reset fork to match upstream (discards local changes) |
safe-push.sh |
epush |
Push with GitGuardian & pre-commit checks |
| Script | Alias | Description |
|---|---|---|
setup-pre-commit.sh |
- | Setup pre-commit hooks and GitGuardian |
| Script | Alias | Description |
|---|---|---|
open-workspace.sh |
eworkspace |
Open multi-repo workspace in Cursor |
| Alias | Goes To |
|---|---|
elearn |
learning workspace directory |
eworkspace |
Open workspace (all configured repos) |
Repo-specific aliases (dynamically generated from MONITOR_REPOS):
e<repo-name>- Navigate to a specific repo (e.g.,eguide,eagent)- These are automatically created based on your
MONITOR_REPOSconfiguration
Once configured, you can:
-
View organization statistics:
elist # Shows all repos in your configured UPSTREAM_ORG -
Check current status:
em # Monitor daily changes esummary # Get comprehensive summary
-
Explore repositories:
- Use
elistto see all repositories - Fork interesting ones with
efork - Clone what you want to work with using
eclone - Set up upstream tracking with
setup-upstreams.sh
- Use
This workspace is generic! You can use it with:
- Embabel (default):
UPSTREAM_ORG=embabel - Spring Framework:
UPSTREAM_ORG=spring-projects - Apache Projects:
UPSTREAM_ORG=apache - Any GitHub organization: Just set
UPSTREAM_ORGinconfig.sh
Note: The examples in this README use "embabel" as a default, but all scripts work with any organization once configured.
# Morning check (2 minutes)
em
# If there are interesting PRs
epr agent 1204
# Weekly sync (every Friday)
esync# 1. Fork it (or fork all at once)
efork
# 2. Clone it
eclone
# 3. Set up tracking
scripts/setup-upstreams.sh
# 4. Start exploring (use your configured BASE_DIR)
cd $BASE_DIR/<repo-name> # or use dynamically generated alias: e<repo-name>
glog # view recent commits# View PR in any repository
epr <repo-name> <pr-number>
# Example: View PR #1204 in a repo called "agent"
epr agent 1204
# Or checkout locally to test
cd $BASE_DIR/<repo-name>
gh pr checkout <pr-number> --repo ${UPSTREAM_ORG}/<repo-name>
# Test it...
mvn clean install # or appropriate build command
# Return to your branch
git checkout main# See how your fork differs from upstream
ecompare
# Detailed diff for guide repo
cd ~/github/jmjava/guide
git diff upstream/main- EMBABEL-WORKFLOW.md - Complete detailed guide (read when you need deep dive)
- Embabel Agent Docs: Check the embabel-agent README
- Examples: Explore embabel-agent-examples
- Community: Check awesome-embabel for curated resources
Create notes in the notes/ directory:
cd ~/github/jmjava/embabel-learning/notes
echo "# My Learning Journey" > learning-log.mdFor PR monitoring, forking, cloning:
gh pr list --repo embabel/embabel-agent
gh release list --repo embabel/embabel-agentFor understanding code history:
- File blame annotations
- Commit history
- Branch comparison
- See who's working on what
For keeping your fork in sync:
git fetch upstream
git merge upstream/mainFor automation and monitoring!
- Set up embabel-learning workspace
- Run
eforkto fork all repositories - Run
ecloneto clone interesting repos - Set up aliases with
setup-aliases.sh - Read through
QUICKSTART.md - Explore top 5 repos
- Pick 2-3 repos to focus on
- Analyze recent PRs in those repos
- Run and test example projects
- Start taking notes in
notes/ - Use GitLens to understand code history
- Find a "good first issue"
- Make a small contribution
- Learn from code review feedback
- Help review others' PRs
Run elist to see a live dashboard:
Repository Forked Cloned Upstream Stars
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
embabel-agent β β β β 2958
guide β β β β 3
embabel-agent-examples β β β β 135
...
Legend:
- β = Done
- β = Not done
- Fork the repo (done via
efork) - Clone it locally (done via
eclone) - Set up upstream tracking (done via
setup-upstreams.sh)
- Create a feature branch:
git checkout -b feature/my-feature - Make your changes
- Test thoroughly
- Commit with clear messages
- Push to your fork:
git push origin feature/my-feature - Create a PR on GitHub
# Before starting new work
esync
# Or manually
git fetch upstream
git merge upstream/main# Add to your daily routine
emYou don't need to clone all repos. Start with a few key repositories:
- Use
elistto see all available repositories - Fork and clone 2-3 repos that interest you most
- Expand later as you learn more
Open any file in Cursor and see:
- Who wrote each line
- When it was changed
- Why (commit message)
PRs are the best learning resource:
gh pr list --repo ${UPSTREAM_ORG}/<repo-name> --state all --limit 20
epr <repo-name> <number>Document your learning in notes/:
cd $LEARNING_DIR/notes
echo "# Understanding project architecture" > architecture.mdCRITICAL SAFETY FEATURE: This workspace is configured to PREVENT any commits or pushes to upstream organization repositories.
β Automatic blocking of:
- Commits when
originpoints to upstream organization - Pushes to upstream organization
- Accidental modifications to upstream org repos
β Allowed operations:
- Reading upstream organization repos
- Syncing FROM upstream (pull/merge)
- Committing to YOUR forks (${YOUR_GITHUB_USER}/...)
- Pushing to YOUR forks
- Pre-commit Hooks - Integrated into pre-commit framework, runs automatically on every commit
- Uses
UPSTREAM_ORGfrom your.envfile - Blocks commits if repository origin points to upstream org
- Allows commits only to your forks (
YOUR_GITHUB_USER) - See Security & Pre-commit Hooks section for details
- Uses
- Git Push Hooks - Installed via
install-git-safety-hooks.shto block pushes - Script Safety Checks - All scripts check before operations
- Remote Validation - Verifies
originpoints to your fork
To contribute to upstream organization projects:
-
Work on your fork:
# Make sure origin points to YOUR fork git remote set-url origin git@github.com:${YOUR_GITHUB_USER}/REPO_NAME.git
-
Make changes and commit:
git add . git commit -m "Your changes" epush # Safe push with checks
-
Create PR from your fork:
gh pr create --repo ${UPSTREAM_ORG}/REPO_NAME
Never commit directly to upstream organization repos - always work through your fork!
This repository includes GitGuardian secret scanning and pre-commit hooks to ensure code quality and security.
Run the setup script:
cd $LEARNING_DIR # or your learning workspace directory
./scripts/setup-pre-commit.shThis will:
- Install
pre-commit(if not already installed) - Install GitGuardian CLI (
ggshield) - Install pre-commit hooks
- Run initial checks on all files
Security Checks:
- β GitGuardian - Scans for secrets, API keys, credentials
- β detect-secrets - Additional secret detection
- β Private key detection - Detects SSH keys, certificates
- β AWS credentials detection - Scans for AWS keys
Safety Checks:
- β
Block upstream commits - Prevents accidental commits to upstream organization repos
- Uses
UPSTREAM_ORGfrom your.envfile - Automatically blocks commits to upstream org repos
- Allows commits only to your forks (
YOUR_GITHUB_USER) - Integrated into pre-commit framework - runs on every commit
- Uses
Code Quality Checks:
- β Shell script linting (shellcheck)
- β YAML linting (yamllint)
- β JSON validation
- β Markdown linting
- β Trailing whitespace removal
- β End of file fixes
- β Large file detection
Get your API key from GitGuardian Dashboard:
# Authenticate with GitGuardian
ggshield auth login
# Or set environment variable
export GITGUARDIAN_API_KEY=your-api-key-hereGitGuardian will work locally without an API key, but with limited features:
- β Secret detection still works
- β No cloud sync
- β No team policies
Safe Push (Recommended):
Always use epush to push with security checks:
# From any git repo directory
epush
# Or specify branch/remote
epush main originThis automatically:
- β Runs pre-commit hooks on all files
- β Runs GitGuardian scan
- β Shows what will be pushed
- β Confirms before pushing
Automatic (on commit and push):
# On commit:
git commit -m "Your message"
# Pre-commit hooks run automatically:
# 1. GitGuardian secret scanning (ggshield)
# 2. Safety checks (block-upstream-commit)
# 3. All other hooks (linting, formatting, etc.)
# On push:
git push
# Pre-push hooks run automatically:
# 1. GitGuardian secret scanning (ggshield) - Extra security check
# 2. Safety checks (block-upstream-push) - Prevents pushes to upstream org
# 3. All other pre-push hooksImportant: All commits AND pushes automatically run:
- β GitGuardian secret scanning - Scans for secrets before commit AND push
- β
Safety checks - Prevents commits/pushes to upstream org repos (uses
UPSTREAM_ORGfrom.env) - β All other hooks - Linting, formatting, file checks
If any hook fails, the commit/push is blocked. This ensures:
- No secrets are committed or pushed
- No accidental commits/pushes to upstream org repos
- Code quality standards are maintained
- Double protection: secrets checked on both commit and push
Manual:
# Run on staged files
pre-commit run
# Run on all files
pre-commit run --all-files
# Run specific hook
pre-commit run ggshield
pre-commit run shellcheckGitGuardian Manual Scan:
# Scan entire repository
ggshield scan
# Scan specific file
ggshield scan path/to/file.sh
# Scan commit
ggshield scan commit HEADUpdate hook versions to latest:
pre-commit autoupdateIf you need to bypass hooks (emergency only):
git commit --no-verify -m "Emergency commit"--no-verify when absolutely necessary. It bypasses all security checks.
.pre-commit-config.yaml- Pre-commit hooks configuration.yamllint.yml- YAML linting rules.secrets.baseline- Baseline for detect-secrets (auto-updated).gitignore- Ignored files (includes pre-commit cache)
Hooks not running?
# Reinstall hooks
pre-commit uninstall
pre-commit installGitGuardian auth issues?
# Check auth status
ggshield auth status
# Re-authenticate
ggshield auth loginHook failures?
# See detailed output
pre-commit run --verbose
# Update hooks
pre-commit autoupdatePython/pip not found?
# Ubuntu/Debian
sudo apt-get install python3-pip
# macOS
brew install python3
# Then re-run setup
./scripts/setup-pre-commit.sh| Check | What It Does | When It Runs |
|---|---|---|
| GitGuardian | Scans for secrets, API keys, tokens | Every commit AND push |
| Safety Checks | Prevents commits to upstream org | Every commit |
| Safety Checks (Push) | Prevents pushes to upstream org | Every push |
| detect-secrets | Additional secret patterns | Every commit |
| shellcheck | Shell script linting | On .sh files |
| yamllint | YAML validation | On .yaml, .yml files |
| markdownlint | Markdown formatting | On .md files |
| trailing-whitespace | Removes trailing spaces | Every commit |
| end-of-file-fixer | Ensures newline at EOF | Every commit |
| check-json | Validates JSON syntax | On .json files |
| detect-private-key | Finds private keys | Every commit |
-
Always use safe push:
epush # Runs all checks before pushingThis ensures GitGuardian and pre-commit checks run before your code reaches GitHub.
-
Run before pushing (alternative):
pre-commit run --all-files ggshield scan git push
-
Keep hooks updated:
pre-commit autoupdate
-
Review secrets baseline:
.secrets.baselineis auto-generated- Review if new secrets are detected
- Commit the baseline if secrets are false positives
-
Use GitGuardian dashboard:
- Monitor secret detection across all repos
- Set up team policies
- Get alerts for new secrets
chmod +x ~/github/jmjava/embabel-learning/scripts/*.shsource ~/.bash_aliasesCheck GitHub authentication:
gh auth status# The sync script will guide you, or:
git status
# Fix conflicts in editor
git add .
git merge --continueProblem: IDE shows wrong files or outdated information when reviewing PRs
Solution: Always check sync status first, then review
# 1. Check sync status (30 seconds)
esyncstatus all
# 2. If behind, sync
esync
# 3. Review PR (handles sync automatically)
ereview agent 1223The ereview command automatically:
- β Checks if repo is in sync
- β Syncs if needed
- β Shows PR information
- β Lists files changed
- β Offers to checkout locally
- β Shows diff
- β Provides next steps
After syncing, checking out PRs, or any git operation:
- Reload window:
Cmd/Ctrl+Shift+Pβ "Developer: Reload Window" - Or close and reopen the repo folder in Cursor
IDE shows wrong branch:
git branch # Check current branch
git checkout main # Switch to correct branch
# Then reload IDE windowIDE shows outdated files:
esyncstatus all # Check sync status
esync # Sync if needed
# Then reload IDE windowCan't see PR changes:
ereview agent 123 # Use the workflow script
# Or manually:
gh pr checkout 123 --repo embabel/embabel-agent
# Then reload IDE window- PR Review Guide - Complete guide to reviewing PRs and keeping IDE in sync
- GitHub Fork Workflow
- GitHub CLI Manual
- GitLens Documentation
This learning workspace is for personal use. The embabel repositories each have their own licenses (typically Apache 2.0).
Ready to start? Run elist to see what's available, then efork to get all the repos! π