558 lines
11 KiB
Markdown
558 lines
11 KiB
Markdown
<!-- Powered by BMAD™ Core -->
|
|
|
|
# Setup Code Repository
|
|
|
|
---
|
|
|
|
task:
|
|
id: setup-code-repository
|
|
name: Setup Code Repository
|
|
description: Initialize and structure GitHub repository for book code examples
|
|
persona_default: sample-code-maintainer
|
|
inputs:
|
|
|
|
- book-name
|
|
- programming-language
|
|
- target-platforms
|
|
steps:
|
|
- Initialize GitHub repository
|
|
- Create chapter-based folder structure
|
|
- Add README.md with repository overview
|
|
- Create requirements or package files per chapter
|
|
- Set up testing infrastructure
|
|
- Create .gitignore for language-specific files
|
|
- Add LICENSE file
|
|
- Document version and platform requirements
|
|
- Create CI/CD pipeline (optional)
|
|
- Add contribution guidelines if open-source
|
|
- Run execute-checklist.md with repository-quality-checklist.md
|
|
output: Code repository at https://github.com/{{org}}/{{repo-name}}
|
|
|
|
---
|
|
|
|
## Purpose
|
|
|
|
This task guides you through creating a well-organized, professional code repository that accompanies your technical book. Readers should be able to clone the repository and immediately start working with the code examples.
|
|
|
|
## Prerequisites
|
|
|
|
Before starting this task:
|
|
|
|
- GitHub account created
|
|
- Git installed locally
|
|
- Book outline with chapter structure
|
|
- Understanding of target programming language ecosystem
|
|
- Knowledge of target platforms (Windows/Mac/Linux)
|
|
|
|
## Workflow Steps
|
|
|
|
### 1. Initialize GitHub Repository
|
|
|
|
Create the repository:
|
|
|
|
**Steps:**
|
|
|
|
1. Go to GitHub.com and create new repository
|
|
2. Choose repository name (e.g., `mastering-web-apis-code`)
|
|
3. Add description: "Code examples for [Book Title]"
|
|
4. Choose public or private (usually public for published books)
|
|
5. Initialize with README (we'll replace it)
|
|
6. Clone locally: `git clone https://github.com/yourusername/repo-name.git`
|
|
|
|
**Naming Conventions:**
|
|
|
|
- Use book title or abbreviation
|
|
- Append `-code` or `-examples`
|
|
- Use lowercase with hyphens
|
|
- Examples: `python-data-science-code`, `react-book-examples`
|
|
|
|
### 2. Create Chapter-Based Folder Structure
|
|
|
|
Organize by chapters:
|
|
|
|
**Standard Structure:**
|
|
|
|
```
|
|
repo-root/
|
|
├── chapter-01/
|
|
│ ├── example-01-hello-world/
|
|
│ ├── example-02-variables/
|
|
│ └── README.md
|
|
├── chapter-02/
|
|
│ ├── example-01-functions/
|
|
│ ├── example-02-classes/
|
|
│ └── README.md
|
|
├── chapter-03/
|
|
│ └── ...
|
|
├── appendix-a/
|
|
├── bonus-content/
|
|
├── tests/
|
|
├── .github/
|
|
│ └── workflows/
|
|
├── .gitignore
|
|
├── LICENSE
|
|
├── README.md
|
|
└── requirements.txt (or package.json, etc.)
|
|
```
|
|
|
|
**Alternative Structure (for small books):**
|
|
|
|
```
|
|
repo-root/
|
|
├── src/
|
|
│ ├── ch01_example1.py
|
|
│ ├── ch01_example2.py
|
|
│ ├── ch02_example1.py
|
|
│ └── ...
|
|
├── tests/
|
|
├── README.md
|
|
└── requirements.txt
|
|
```
|
|
|
|
**Create Folders:**
|
|
|
|
```bash
|
|
mkdir -p chapter-{01..12}
|
|
mkdir -p tests
|
|
mkdir -p .github/workflows
|
|
```
|
|
|
|
### 3. Add README.md with Repository Overview
|
|
|
|
Create comprehensive README:
|
|
|
|
**README Template:**
|
|
|
|
```markdown
|
|
# [Book Title] - Code Examples
|
|
|
|
Code examples and exercises from **[Book Title]** by [Author Name].
|
|
|
|
## About This Repository
|
|
|
|
This repository contains all code examples from the book, organized by chapter. Each example is self-contained and includes:
|
|
|
|
- Working code with comments
|
|
- Setup instructions
|
|
- Expected output
|
|
- Common troubleshooting tips
|
|
|
|
## Prerequisites
|
|
|
|
- [Language] version X.X or higher
|
|
- [Tool/Framework] (optional)
|
|
- Basic understanding of [concepts]
|
|
|
|
## Installation
|
|
|
|
### Option 1: Clone Entire Repository
|
|
|
|
```bash
|
|
git clone https://github.com/username/repo-name.git
|
|
cd repo-name
|
|
```
|
|
|
|
### Option 2: Download Specific Chapter
|
|
|
|
Navigate to the chapter folder and download individual examples.
|
|
|
|
## Setup
|
|
|
|
1. Install dependencies:
|
|
```bash
|
|
[package manager install command]
|
|
```
|
|
|
|
2. Verify installation:
|
|
```bash
|
|
[verification command]
|
|
```
|
|
|
|
3. Run tests (optional):
|
|
```bash
|
|
[test command]
|
|
```
|
|
|
|
## Repository Structure
|
|
|
|
- `chapter-01/` - Introduction and basics
|
|
- `chapter-02/` - [Chapter topic]
|
|
- `chapter-03/` - [Chapter topic]
|
|
- ...
|
|
- `tests/` - Automated tests for code examples
|
|
- `appendix-a/` - Additional resources
|
|
|
|
## Usage
|
|
|
|
Each chapter folder contains a README with:
|
|
|
|
- Learning objectives for that chapter
|
|
- Setup instructions specific to examples
|
|
- How to run the code
|
|
- Expected output
|
|
|
|
Navigate to a chapter and follow its README.
|
|
|
|
## Requirements
|
|
|
|
- [Language]: [Version]
|
|
- [Framework/Library]: [Version]
|
|
- [Platform]: [Supported platforms]
|
|
|
|
See `requirements.txt` (or `package.json`, `Gemfile`, etc.) for complete dependency list.
|
|
|
|
## Running Examples
|
|
|
|
```bash
|
|
cd chapter-03/example-01-api-basics
|
|
[command to run example]
|
|
```
|
|
|
|
## Testing
|
|
|
|
```bash
|
|
[command to run all tests]
|
|
```
|
|
|
|
## Contributing
|
|
|
|
Found a bug or improvement? Please [open an issue](link) or submit a pull request.
|
|
|
|
## License
|
|
|
|
[License type - MIT, Apache 2.0, etc.]
|
|
|
|
## About the Book
|
|
|
|
**[Book Title]**
|
|
By [Author Name]
|
|
Published by [Publisher]
|
|
[Purchase link]
|
|
|
|
## Support
|
|
|
|
- [Book website](link)
|
|
- [Author contact](link)
|
|
- [Errata page](link)
|
|
```
|
|
|
|
### 4. Create Requirements/Package Files Per Chapter
|
|
|
|
Define dependencies:
|
|
|
|
**For Python:**
|
|
|
|
Create `requirements.txt` in root and per-chapter if dependencies differ:
|
|
|
|
```
|
|
# requirements.txt (root)
|
|
requests==2.31.0
|
|
pytest==7.4.0
|
|
black==23.7.0
|
|
|
|
# chapter-03/requirements.txt (if different)
|
|
requests==2.31.0
|
|
flask==2.3.0
|
|
```
|
|
|
|
**For Node.js:**
|
|
|
|
Create `package.json`:
|
|
|
|
```json
|
|
{
|
|
"name": "book-code-examples",
|
|
"version": "1.0.0",
|
|
"description": "Code examples for [Book Title]",
|
|
"scripts": {
|
|
"test": "jest",
|
|
"lint": "eslint ."
|
|
},
|
|
"dependencies": {
|
|
"express": "^4.18.0"
|
|
},
|
|
"devDependencies": {
|
|
"jest": "^29.5.0",
|
|
"eslint": "^8.43.0"
|
|
},
|
|
"engines": {
|
|
"node": ">=18.0.0"
|
|
}
|
|
}
|
|
```
|
|
|
|
**For Java:**
|
|
|
|
Create `pom.xml` (Maven) or `build.gradle` (Gradle)
|
|
|
|
**Version Pinning:**
|
|
|
|
- Pin exact versions for reproducibility
|
|
- Document why specific versions are required
|
|
- Test with version ranges if supporting multiple versions
|
|
|
|
### 5. Set Up Testing Infrastructure
|
|
|
|
Add automated tests:
|
|
|
|
**Python (pytest):**
|
|
|
|
```python
|
|
# tests/test_chapter01.py
|
|
import pytest
|
|
from chapter01.example01 import hello_world
|
|
|
|
def test_hello_world():
|
|
result = hello_world()
|
|
assert result == "Hello, World!"
|
|
```
|
|
|
|
**Node.js (Jest):**
|
|
|
|
```javascript
|
|
// tests/chapter01.test.js
|
|
const { helloWorld } = require('../chapter-01/example-01/index');
|
|
|
|
test('returns hello world', () => {
|
|
expect(helloWorld()).toBe('Hello, World!');
|
|
});
|
|
```
|
|
|
|
**Test Structure:**
|
|
|
|
```
|
|
tests/
|
|
├── test_chapter01.py
|
|
├── test_chapter02.py
|
|
├── test_chapter03.py
|
|
└── conftest.py (pytest configuration)
|
|
```
|
|
|
|
### 6. Create .gitignore
|
|
|
|
Exclude unnecessary files:
|
|
|
|
**Python .gitignore:**
|
|
|
|
```
|
|
# Python
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
*.so
|
|
.Python
|
|
venv/
|
|
env/
|
|
ENV/
|
|
.venv
|
|
|
|
# IDE
|
|
.vscode/
|
|
.idea/
|
|
*.swp
|
|
*.swo
|
|
|
|
# OS
|
|
.DS_Store
|
|
Thumbs.db
|
|
|
|
# Testing
|
|
.coverage
|
|
htmlcov/
|
|
.pytest_cache/
|
|
```
|
|
|
|
**Node.js .gitignore:**
|
|
|
|
```
|
|
# Node
|
|
node_modules/
|
|
npm-debug.log*
|
|
yarn-debug.log*
|
|
yarn-error.log*
|
|
|
|
# IDE
|
|
.vscode/
|
|
.idea/
|
|
|
|
# OS
|
|
.DS_Store
|
|
|
|
# Testing
|
|
coverage/
|
|
.nyc_output/
|
|
```
|
|
|
|
### 7. Add LICENSE File
|
|
|
|
Choose appropriate license:
|
|
|
|
**MIT License (permissive):**
|
|
|
|
```
|
|
MIT License
|
|
|
|
Copyright (c) [year] [fullname]
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
of this software and associated documentation files (the "Software"), to deal
|
|
in the Software without restriction...
|
|
```
|
|
|
|
**Apache 2.0 (permissive with patent grant):**
|
|
|
|
Use for enterprise-friendly code.
|
|
|
|
**Creative Commons (for content):**
|
|
|
|
Consider for tutorials/documentation.
|
|
|
|
**How to Choose:**
|
|
|
|
- MIT: Simple, permissive, widely used
|
|
- Apache 2.0: Patent protection, enterprise-friendly
|
|
- GPL: Copyleft, requires derivative works to be open source
|
|
- Proprietary: All rights reserved (unusual for book code)
|
|
|
|
### 8. Document Version and Platform Requirements
|
|
|
|
Specify compatibility:
|
|
|
|
**Create REQUIREMENTS.md or include in README:**
|
|
|
|
```markdown
|
|
## System Requirements
|
|
|
|
### Supported Platforms
|
|
|
|
- ✅ macOS 11+ (Big Sur or later)
|
|
- ✅ Windows 10/11
|
|
- ✅ Linux (Ubuntu 20.04+, Fedora 35+, Debian 11+)
|
|
|
|
### Software Requirements
|
|
|
|
- Python 3.11 or higher (tested on 3.11, 3.12)
|
|
- pip 23.0+
|
|
- Git 2.30+
|
|
|
|
### Optional Tools
|
|
|
|
- Docker 20.10+ (for containerized examples)
|
|
- VS Code 1.75+ (recommended IDE)
|
|
```
|
|
|
|
### 9. Create CI/CD Pipeline (Optional but Recommended)
|
|
|
|
Automate testing:
|
|
|
|
**GitHub Actions (.github/workflows/test.yml):**
|
|
|
|
```yaml
|
|
name: Test Code Examples
|
|
|
|
on: [push, pull_request]
|
|
|
|
jobs:
|
|
test:
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
matrix:
|
|
os: [ubuntu-latest, windows-latest, macos-latest]
|
|
python-version: ['3.11', '3.12']
|
|
|
|
steps:
|
|
- uses: actions/checkout@v3
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: ${{ matrix.python-version }}
|
|
- name: Install dependencies
|
|
run: |
|
|
pip install -r requirements.txt
|
|
- name: Run tests
|
|
run: |
|
|
pytest tests/
|
|
```
|
|
|
|
**Benefits of CI/CD:**
|
|
|
|
- Catch breaking changes immediately
|
|
- Verify cross-platform compatibility
|
|
- Test multiple language versions
|
|
- Build confidence for readers
|
|
|
|
### 10. Add Contribution Guidelines
|
|
|
|
If open-source:
|
|
|
|
**Create CONTRIBUTING.md:**
|
|
|
|
```markdown
|
|
# Contributing
|
|
|
|
Thank you for your interest in improving these code examples!
|
|
|
|
## Reporting Issues
|
|
|
|
- Check existing issues first
|
|
- Provide code example and error message
|
|
- Specify your platform and version
|
|
|
|
## Submitting Pull Requests
|
|
|
|
1. Fork the repository
|
|
2. Create a feature branch
|
|
3. Make your changes
|
|
4. Add tests if applicable
|
|
5. Ensure all tests pass
|
|
6. Submit pull request with clear description
|
|
|
|
## Code Style
|
|
|
|
- Follow [language-specific style guide]
|
|
- Run linter before committing
|
|
- Add comments for complex logic
|
|
```
|
|
|
|
### 11. Validate Repository Quality
|
|
|
|
Run checklist:
|
|
|
|
- Run execute-checklist.md with repository-quality-checklist.md
|
|
|
|
## Success Criteria
|
|
|
|
A completed code repository should have:
|
|
|
|
- [ ] GitHub repository initialized and cloned
|
|
- [ ] Logical folder structure (chapter-based or src-based)
|
|
- [ ] Comprehensive README.md
|
|
- [ ] Dependencies documented (requirements.txt, package.json, etc.)
|
|
- [ ] Testing infrastructure set up
|
|
- [ ] Proper .gitignore for language
|
|
- [ ] LICENSE file included
|
|
- [ ] Version and platform requirements documented
|
|
- [ ] CI/CD pipeline configured (optional)
|
|
- [ ] Contribution guidelines (if open-source)
|
|
- [ ] Repository quality checklist passed
|
|
|
|
## Common Pitfalls to Avoid
|
|
|
|
- **No structure**: Dumping all code in root directory
|
|
- **Missing dependencies**: Not documenting required packages
|
|
- **No README**: Readers don't know how to use the repository
|
|
- **Untested code**: Code works on author's machine only
|
|
- **No license**: Legal uncertainty for readers
|
|
- **Platform assumptions**: Code only works on one OS
|
|
- **Outdated dependencies**: Using deprecated package versions
|
|
|
|
## Next Steps
|
|
|
|
After setting up the repository:
|
|
|
|
1. Add code examples as you write chapters
|
|
2. Test on all supported platforms
|
|
3. Update README as repository grows
|
|
4. Set up GitHub Pages for documentation (optional)
|
|
5. Link repository prominently in book's front matter
|