cpak is decentralized by design: you can install any package by its Git origin:
cpak install github.com/containerpak/chromeOptionally, you can register federated indexes ("stores") to search and manage multiple collections of packages.
A federated store is a Git repository containing a collection of categories,
each with a set of packages. Each package is defined by a manifest.json file
that describes the package's metadata.
- Fork or open a PR against the store repo.
- Add your
manifest.jsonunder the correct category:as you can see, the path is a combination of the category and the Git origin of the package, following a Go-style package path convention.Music/github/com/yourorg/yourapp/manifest.json - On each PR commit, the CI bot automatically:
- Validates the manifest schema
- Attempts
cpak install <origin>against the PR index.
Then moderators will review the PR and occasionally request changes. Then the following steps will be taken:
- A moderator run
!publishin the PR to trigger the CI bot. - CI regenerates both
index.jsonandtimestamp.jsonin the same branch as the PR. - After a successful publish, maintainers merge the PR into the main branch, making the new package available to all users.
Registers a new remote store.
cpak store-add github.com/containerpak/storeLists all configured remote stores:
cpak store-list
- github.com/containerpak/store
- github.com/anotherorg/another-store/
Removes a store by its URI:
cpak store-remove github.com/containerpak/store
cpak install spotify
1. github.com/spotifyltd/spotify
2. github.com/spotifier/spotify-ultra
Which cpak do you want to install? (1-2): 1
Each store repo should use this layout:
root/
├── categories/
├──── Music/
│ ├── github/com/org1/app1/manifest.json
│ │ ├── github/com/org2/app2/manifest.json
│ ├── index.json
│ └── ...
├── index.json
└── timestamp.json
manifest.jsonfiles must match the manifest schema.index.jsonandtimestamp.jsonare generated; do not edit.