GitHub Action to create a DCI component in multiple topics.
When a component already exists, the component will be retrieved, it will not update it.
To use this Action, a RemoteCI is required. Follow these steps to create one if one is not already created.
- Login into your account: https://www.distributed-ci.io/login
- Go to the RemoteCI section: https://www.distributed-ci.io/remotecis
- Click on the "Create a new remoteci" button
- Set a name
- Select team owner
- Search your newly created RemoteCI
- Under the Authentication column click on credentials.yaml
- Copy on the button "Copy to clipboard"
- Save the content in a file
With the RemoteCI data create two secrets, any name can be used for the secrets, we will use the same for consistency:
DCI_CLIENT_ID: Use the content ofDCI_CLIENT_ID, e.g.remoteci/012345678-90ab-...DCI_API_SECRET: Use the content ofDCI_API_SECRET, e.g.abcxyzABCXYZ01239...
Some Inputs are required, while others are optional.
Required:
-
dciClientId: Remote CI client ID, this is passed as a secret. -
dciApiSecret: Remote CI API secret, this is passed as a secret. -
dciTopics: A comma-separated list of DCI topics, or a special termall-<TOPIC_TYPE>for the latest topics. WhereTOPIC_TYPEis one of:OCP,OSPorRHEL.# Single topic dciTopics: OCP-4.12 # Multiple topics dciTopics: 'OCP-4.11,OCP-4.12' # Multiple topics, multi-line dciTopics: ' OCP-4.11, OCP-4.12, OCP-4.13, ' # Other topics dciTopics: RHEL-9.2 # All the latest versions of the OSP topic dciTopics: all-osp # All the latest versions of the OCP topic dciTopics: all-OCP
-
componentName: DCI component name, e.g.My Awesome ComponentorFredCo awesome operatororacme-component, etc. -
componentVersion: DCI component version, the version of the component to create, e.g.v1.2.3,22.10,9.2-rc1,v12.28.12-alpha, etc. -
componentRelease: DCI component release tag must be one of the following:nightly,dev,candidateorga.
Optional:
-
dciCsUrl: Remote CI control server URL, default ishttps://api.distributed-ci.io/. -
componentTags: List of DCI component Tags, for example:# Single Tag componentTags: "arch:arm64" # Multiple Tags componentTags: "os:linux,arch:amd64"
-
componentUrl: DCI component URL, requires an http(s) schema, e.g.https://my-site.com,https://github.com/my-org/my-repo -
componentData: DCI component data, a compact (one-liner) JSON entry, e.g.{"foo": "bar"},{"uno":null,"dos":["tres",{"sub":{"on":true,"off":false}}]}
Here few examples of how to use this Action in your workflow as a step
Creating component My container application with version v1.2.3-alpha, and dev release. The component will be created only in OCP-4.12.
steps:
- name: Create DCI components
uses: dci-labs/dci-component@v1.0.0
with:
dciClientId: ${{ secrets.DCI_CLIENT_ID }}
dciApiSecret: ${{ secrets.DCI_API_SECRET }}
dciTopics: "OCP-4.12"
componentName: "My container application"
componentVersion: v1.2.3
componentRelease: "dev"Creating a component on multiple OCP topic versions with the name my-operator and version 22.04, with a reference to its repository https://github.com/myorg/my-operator, with some custom tags, and the location of the image: {"imageURL": "quay.io/myorg/my-operator:22.04"}
steps:
- name: Create DCI components
uses: dci-labs/dci-component@v1
with:
dciClientId: ${{ secrets.DCI_CLIENT_ID }}
dciApiSecret: ${{ secrets.DCI_API_SECRET }}
dciTopics: '
OCP-4.8,
OCP-4.9,
OCP-4.10,
OCP-4.11
'
componentName: my-operator
componentVersion: "22.04"
componentRelease: ga
componentUrl: https://github.com/myorg/my-operator
componentTags: "ansible-operator,os:linux,2022"
componentData: {"imageURL": "quay.io/myorg/my-operator:22.04"}The output of the component created is stored in components and can be re-used like this for a nice output in GHA:
steps:
- name: Create DCI components
uses: dci-labs/dci-component@v1
with:
dciClientId: ${{ secrets.DCI_CLIENT_ID }}
dciApiSecret: ${{ secrets.DCI_API_SECRET }}
dciTopics: "OCP-4.12"
componentName: "My container application"
componentVersion: v1.2.3
componentRelease: "dev"
id: dci
- name: Results
run: |
echo "## DCI components" >> ${GITHUB_STEP_SUMMARY}
echo "" >> ${GITHUB_STEP_SUMMARY}
echo "\`\`\`JSON" >> ${GITHUB_STEP_SUMMARY}
<<<'${{ steps.dci.outputs.components }}' jq . >> ${GITHUB_STEP_SUMMARY}
echo "\`\`\`" >> ${GITHUB_STEP_SUMMARY}
echo "" >> ${GITHUB_STEP_SUMMARY}The Results step will take the markdown generated and render it nicely.
Please take a look at CHANGELOG.md