Deploying to Multiple GitHub Repositories
The approach we suggest is to have a dedicated CircleCI build that pushes the configuration to a list of repositories by leveraging the GitHub API.
The repository this CircleCI project is built on would contain:
- The separate configuration file to be pushed to the other repositories (
global-ci.yml
in this example) - A
config.yml
that defines the build to push the above configuration file - A file containing the list of repositories in the form “user/repository” or “org/repository” (
satellites.txt
in this example)
You would also need to add an environment variable containing a GitHub API token with appropriate permissions/scopes.
Config Example
The config.yml
would be:
version: 2.1 jobs: deploy-config: docker: - image: circleci/python steps: - checkout - run: name: Test command: | echo GLOBAL_64=$(base64 -w 0 global-ci.yml) >> $BASH_ENV while IFS= read -r repo do echo BLOB_SHA=$(curl --location --request GET "https://api.github.com/repos/$repo/contents/.circleci/config.yml" --header "Authorization: token ${GH_TOKEN}" --header "Accept: application/vnd.github.v3+json"|jq -r .sha) >> $BASH_ENV source $BASH_ENV curl --location --request PUT "https://api.github.com/repos/$repo/contents/.circleci/config.yml" --header "Authorization: token ${GH_TOKEN}" --header "Accept: application/vnd.github.v3+json" --data-raw "{\"message\":\"Global config update\", \"content\":\"$GLOBAL_64\", \"sha\":\"${BLOB_SHA}\"}" done < "satellites.txt" workflows: main: jobs: - deploy-config
Comments
Article is closed for comments.