|
1 | | -# Early access |
| 1 | +# Early Access |
2 | 2 |
|
3 | | -Early access allows the Docs team to publish docs to docs.github.com without putting the content files in github/docs or github/docs-internal. This allows the Docs team to publish articles about limited access features. |
| 3 | +The Early Access module enables the GitHub Docs team to publish documentation for features that are in limited access (beta, technical preview, etc.) without exposing the content in the public `github/docs` repository. |
| 4 | + |
| 5 | +## Purpose & Scope |
| 6 | + |
| 7 | +This system allows for: |
| 8 | +- **Private Content Hosting**: Storing sensitive or unreleased documentation in a separate, private repository (`github/docs-early-access`). |
| 9 | +- **Seamless Integration**: Merging this private content into the main site build so it appears native to the user (e.g., under `/en/early-access`). |
| 10 | +- **Access Control**: Hiding these pages from public navigation and search engines, making them accessible only via direct links or specific "Early Access" index pages. |
| 11 | + |
| 12 | +## Architecture |
| 13 | + |
| 14 | +### Content Storage |
| 15 | + |
| 16 | +Early access content lives in a separate private repository: `github/docs-early-access`. |
| 17 | +- **Structure**: It mirrors the main repo's structure (`content/`, `data/`, `assets/`). |
| 18 | +- **Integration**: During the build process (or local development), files from the private repo are copied or symlinked into the main `docs-internal` directory. |
| 19 | + |
| 20 | +### Middleware |
| 21 | + |
| 22 | +The logic for serving and listing these pages is handled in `src/early-access/middleware/early-access-links.ts`. |
| 23 | +- **`earlyAccessContext`**: This middleware runs on requests to `/early-access`. It: |
| 24 | + - Checks if the user is on an early access path. |
| 25 | + - Retrieves a list of hidden pages whose path starts with `early-access`. |
| 26 | + - Injects these links into the rendering context (`req.context.earlyAccessPageLinks`), allowing index pages to dynamically list available early access content. |
| 27 | + |
| 28 | +### Scripts |
| 29 | + |
| 30 | +A suite of scripts in `src/early-access/scripts` manages the workflow: |
| 31 | +- **`clone-locally`**: Clones the private `docs-early-access` repo for local development. |
| 32 | +- **`symlink-from-local-repo.ts`**: Symlinks the cloned content into the main `content/` and `assets/` directories so the Next.js server can see them. |
| 33 | +- **`merge-early-access.sh`**: Used in CI/CD to physically move files from the checked-out private repo into the build directory. |
| 34 | +- **`update-data-and-image-paths.ts`**: A utility to fix up paths when moving content between the main repo and early access. |
| 35 | + |
| 36 | +## Setup & Usage |
| 37 | + |
| 38 | +### Local Development |
| 39 | + |
| 40 | +To work on Early Access content locally: |
| 41 | + |
| 42 | +1. **Clone the Repo**: |
| 43 | + ```bash |
| 44 | + npm run clone-early-access |
| 45 | + ``` |
| 46 | + This clones `github/docs-early-access` into a sibling directory. |
| 47 | + |
| 48 | +2. **Symlink Content**: |
| 49 | + ```bash |
| 50 | + npm run symlink-from-local-repo |
| 51 | + ``` |
| 52 | + This links the content into `docs-internal`. |
| 53 | + |
| 54 | +3. **Run the Server**: |
| 55 | + ```bash |
| 56 | + npm start |
| 57 | + ``` |
| 58 | + You can now access pages at `http://localhost:4000/en/early-access`. |
| 59 | + |
| 60 | +### Adding New Content |
| 61 | + |
| 62 | +1. Create markdown files in the `docs-early-access` repo. |
| 63 | +2. Ensure the frontmatter includes `hidden: true` to prevent it from appearing in the main sidebar navigation (unless specifically desired). |
| 64 | +3. Use the `early-access` directory prefix. |
| 65 | + |
| 66 | +## Dependencies |
| 67 | + |
| 68 | +- **`github/docs-early-access`**: The private repository containing the actual content. |
| 69 | +- **CI/CD Workflows**: The deployment process must have access to the private repo to merge the content before building. |
| 70 | + |
| 71 | +## Ownership |
| 72 | + |
| 73 | +- **Team**: `@github/docs-engineering` |
| 74 | +- **Content Owners**: The Writers and Product Managers responsible for the specific early access features. |
| 75 | + |
| 76 | +## Current State & Known Issues |
| 77 | + |
| 78 | +- **"Hidden" but Public**: While the source is private, once deployed to `docs.github.com`, the pages are technically public if you know the URL. They are "security through obscurity" (hidden from nav/search), not authenticated. |
| 79 | +- **Build Complexity**: The merging process adds complexity to the build pipeline and can sometimes cause confusion with path resolution or asset loading if files are moved incorrectly. |
0 commit comments