Fork the repository
Fork or clone?
Section titled “Fork or clone?”Fork. A plain clone works for a one-off local build, but a product needs more:
- GitHub Actions run in your repository. The release workflow builds and publishes from the repository that holds the tag, with that repository’s secrets and variables.
- Updates point at your releases. The desktop updater and
install.shreaddistribution.repositoryfrom your brand. That repository must publish releases. - Upstream stays one
git mergeaway. A fork keeps the shared history, so upstream fixes merge cleanly into your product. - Pull requests back upstream come from branches in your fork.
A fork of a public repository is public. If your organization needs a private
product repository, create an empty private repository and push a mirror instead
(git push --mirror). Everything on these pages works the same way; you just add the
upstream remote by hand.
Create the fork
Section titled “Create the fork”-
Open github.com/frogg-app/frogg and choose Fork. Pick your organization as the owner. Keep the default branch only.
-
Clone your fork and add upstream:
Terminal window git clone https://github.com/acme-corp/frogg.git acme-studiocd acme-studiogit remote add upstream https://github.com/frogg-app/frogg.gitgit fetch upstreamgit remote -vorigin https://github.com/acme-corp/frogg.git (fetch)origin https://github.com/acme-corp/frogg.git (push)upstream https://github.com/frogg-app/frogg.git (fetch)upstream https://github.com/frogg-app/frogg.git (push) -
Install and confirm the stock build works before changing anything:
Terminal window npm cinpm run brand:checkfrogg: valid (app.frogg.frogg); updates github-release -
Open the fork’s Actions tab and enable workflows. GitHub disables them in new forks. The release workflow declares
contents: writeand publishes with the built-inGITHUB_TOKEN; if your organization restricts workflow permissions, allow that scope for this repository.
Pick a branch model
Section titled “Pick a branch model”Keep your product changes in files upstream never touches. That is what keeps merges boring.
| Branch | Contains | Based on |
|---|---|---|
main |
Upstream history plus your brand directory and release tags | upstream/main |
feature/* |
Product features you may contribute back | upstream/main |
acme/* (optional) |
Product-only changes you will never upstream | your main |
Two supported places for the brand itself:
- A directory in your fork, for example
brands/acme/. Upstream only shipsbrands/frogg/andbrands/example/, sobrands/acme/never conflicts. Select it with theFROGG_BRAND_DIRrepository variable. - A separate branding repository, pinned by commit. CI checks it out next to the source. Your fork then carries no product files at all. See external brand repositories.
Do not edit brands/frogg/, the shared workflows, or shared source to set your product
identity. Every such edit is a future merge conflict, and none of them are needed.
Next: create a brand.