{"id":20801921,"url":"https://github.com/philips-software/docker-ci-scripts","last_synced_at":"2025-08-02T01:38:33.458Z","repository":{"id":37924704,"uuid":"170522427","full_name":"philips-software/docker-ci-scripts","owner":"philips-software","description":"Docker CI scripts","archived":false,"fork":false,"pushed_at":"2025-06-23T17:32:53.000Z","size":330,"stargazers_count":13,"open_issues_count":15,"forks_count":10,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-02T17:06:16.953Z","etag":null,"topics":["ci-scripts","github-actions","hacktoberfest"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/philips-software.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":"CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-02-13T14:33:59.000Z","updated_at":"2025-05-12T08:50:37.000Z","dependencies_parsed_at":"2023-02-13T20:01:56.200Z","dependency_job_id":"c811d81d-c4cb-4dac-9a15-a78e58e3e869","html_url":"https://github.com/philips-software/docker-ci-scripts","commit_stats":{"total_commits":185,"total_committers":17,"mean_commits":"10.882352941176471","dds":0.4756756756756757,"last_synced_commit":"1fafddd1971fc6ccfcdb7e4bc2a609336ffb6fc1"},"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/philips-software/docker-ci-scripts","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fdocker-ci-scripts","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fdocker-ci-scripts/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fdocker-ci-scripts/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fdocker-ci-scripts/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/philips-software","download_url":"https://codeload.github.com/philips-software/docker-ci-scripts/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/philips-software%2Fdocker-ci-scripts/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268326356,"owners_count":24232471,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-01T02:00:08.611Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ci-scripts","github-actions","hacktoberfest"],"created_at":"2024-11-17T18:26:10.475Z","updated_at":"2025-08-02T01:38:33.443Z","avatar_url":"https://github.com/philips-software.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# GitHub Action for creating and publishing docker images\n\n[![Marketplace](https://img.shields.io/badge/GitHub-Marketplace-green.svg)](https://github.com/marketplace/actions/docker-build-and-publish) [![Release](https://img.shields.io/github/release/philips-software/docker-ci-scripts.svg)](https://github.com/philips-software/docker-ci-scripts/releases)\n\nThis action will build a docker image from a given directory.\n\n\u003c/div\u003e\n\n- You can give a docker image multiple tags.\n- You can specify for which branch it should push to a docker registry ( `docker.io` by default ).\n- Each docker image contains information about the exact context in which the image is build.\n- When pushing to docker.io, the description is updated with the `readme.md` file.\n- If required, the image is signed with [cosign](https://github.com/sigstore/cosign).\n- If required, a provenance file is created according to the [SLSA.dev](https://slsa.dev) specifications.\n- If required, the provenance file is attached to the container.\n- If required, a SBOM file is created according to the [SPDX](https://spdx.dev) specifications. We're using [syft](https://github.com/anchore/syft/) for that.\n- If required, the SBOM file is attached to the container.\n\nIn every docker image two files are added to the build context:\n\n- `TAGS` - contains all tags associated with the image at time it was build.\n- `REPO` - contains a link to the github repository with the commit sha.\n\nThis information can also be found in the provenance file. Using the provenance file is more secure,\nbecause you don't need to download and run the image in order to get the information.\n\n## Contents\n\n- [Description](#description)\n- [Inputs](#inputs)\n- [Environment Variables](#environment-variables)\n- [Outputs](#outputs)\n- [Runs](#runs)\n- [Example Usage](#example-usage)\n- [Example Projects](#example-projects)\n- [Contributors](#contributors)\n- [License](#license)\n\n\u003c!-- action-docs-description --\u003e\n## Description\n\nBuilds docker images and publish them on request\n\u003c!-- action-docs-description --\u003e\n\u003c!-- action-docs-inputs --\u003e\n## Inputs\n\n| parameter | description | required | default |\n| --- | --- | --- | --- |\n| dockerfile | Path to Dockerfile | `true` |  |\n| image-name | The name of the image | `true` |  |\n| tags | String with tags, separated by a space | `true` |  |\n| push-branches | Specifies branches to push, separated by a space | `false` | master main |\n| push-on-git-tag | Push when a git tag is created | `false` | false |\n| base-dir | Base directory to perform the build | `false` | . |\n| slsa-provenance | Create SLSA Provenance json | `false` |  |\n| sbom | Create Software Bill Of Material in SPDX format | `false` |  |\n| sign | Sign image with Cosign. Requires COSIGN environment variables to be set. When used in combination with slsa-provenance / sbom it will also attach the results to the image. | `false` |  |\n| github_context | internal (do not set): the \"github\" context object in json | `true` | ${{ toJSON(github) }} |\n| runner_context | internal (do not set): the \"runner\" context object in json | `true` | ${{ toJSON(runner) }} |\n\u003c!-- action-docs-inputs --\u003e\n\n## Environment variables\n\nThese variables can be set in the github repository secret vault.\n\n### `REGISTRY_USERNAME`\n\n**Required** Registry username\n\n### `REGISTRY_TOKEN`\n\n**Required** Registry token\n\n### `REGISTRY_URL`\n\n**Optional** Registry to push the docker image to. Defaults to Docker hub.\n\n### `DOCKER_ORGANIZATION`\n\n**Required for Docker hub** Container will be pushed in this organization. Example: `philipssoftware`\nNo need to put this in GitHub Secret vault. This will be public anyway.\n\n### `GITHUB_ORGANIZATION`\n\n**Optional** Github organization. Defaults to DOCKER_ORGANIZATION. Example: `philips-software`\nNo need to put this in GitHub Secret vault. This will be public anyway.\n\n### `DOCKER_BUILD_ARGS`\n\n**Optional** The build arguments for a docker build.\n\nExamples: Using environment variables (make sure to have these environment variables exported when using!)\n\n- Single environment build argument: `--build-arg FOO`\n- Multiple environment build arguments: `--build-arg FOO --build-arg BAR`\n\nExamples: Using explicit variables\n\n- Single explicit build arguments: `--build-arg FOO=foo`\n- Multiple explicit build arguments: `--build-arg FOO=foo --build-arg BAR=bar`\n\n### `KEYLESS`\n\n**Optional** Set to `true` when you want to use keyless signing with [SigStore's Rekor and Fulcio](https://blog.sigstore.dev/sigstore-ga-ddd6ba67894d).\n**Warning** This is a **PUBLIC** transparancy log, this means you will reveal information about your OCI images publically. **DO NOT USE THIS FOR PRIVATE IMAGES**.\n\nYou can use `KEYLESS` to start using SigStore's Rekor and Fulcio together with GitHub OIDC. When set, you don't need to specify the three COSIGN Arguments.\n\n### `COSIGN_PRIVATE_KEY`\n\n**Optional** Cosign Private Key used to attach provenance file.\nPlease make sure this is a GitHub Secret.\n\n### `COSIGN_PASSWORD`\n\n**Optional** Cosign Password used to attach provenance file.\nPlease make sure this is a GitHub Secret.\n\n### `COSIGN_PUBLIC_KEY`\n\n**Optional** Cosign Public Key used to attach provenance file.\nNo need to put this in GitHub Secret vault. Good practice is to put this also in a repo as `cosign.pub`.\n\n### `COSIGN_DOCKER_MEDIA_TYPES`\n\n**Optional** Cosign supports older MEDIA_TYPES.\nYou can set this to `1` with this environment variable. Can be used for Artifactory for example.\n\n\u003c!-- action-docs-outputs --\u003e\n## Outputs\n\n| parameter | description |\n| --- | --- |\n| container-digest | Container digest. Can be used for generating provenance and signing |\n| container-tags | Container tags. Can be used for generating provenance and signing |\n| push-indicator | Is set to true when containers have been pushed to the container repository |\n| slsa-provenance-file | SLSA provenance filename if created |\n| sbom-file | SBOM filename if created |\n\u003c!-- action-docs-outputs --\u003e\n\u003c!-- action-docs-runs --\u003e\n## Runs\n\nThis action is a `docker` action.\n\u003c!-- action-docs-runs --\u003e\n\n## Example usage\n\n```yaml\n- uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: \"./docker/Dockerfile\"\n    image-name: \"node\"\n    tags: \"latest 12 12.1 12.1.4\"\n  env:\n    REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}\n    REGISTRY_TOKEN: \"${{ secrets.REGISTRY_TOKEN }}\"\n    DOCKER_ORGANIZATION: myDockerOrganization\n```\n\n#### Using Docker Build arguments:\n\n```yaml\n- uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: \"./docker/Dockerfile\"\n    image-name: \"node\"\n    tags: \"latest 12 12.1 12.1.4\"\n  env:\n    REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}\n    REGISTRY_TOKEN: \"${{ secrets.REGISTRY_TOKEN }}\"\n    DOCKER_ORGANIZATION: myDockerOrganization\n    FOO_BUILD_ARG: \"foo\"\n    BAR_BUILD_ARG: ${{ secrets.SECRET_BAR_BUILD_ARG }}\n    DOCKER_BUILD_ARGS: \"--build-arg FOO_BUILD_ARG --build-arg BAR_BUILD_ARG\"\n```\n\n#### With GitHub Package registry:\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n```\n\n#### Signing the Image:\n\nWe can automatically sign the image with Cosign if you pass the `sign` argument.\n\nThis can be done in keyless mode with GitHub OIDC, or you can specify your own keys.\n\nKeyless uses Sigstores Rekor and Fulcio. These are **PUBLIC** transparancy logs. This\nmeans you should **NOT** use this when dealing with Private Images.\n\n##### Manual, bring your own keys.\n\nYou need to provide the COSIGN environment variables in order to actually sign it.\nYou can create a key pair by installing Cosign on your local machine and run:\n\n```bash\n  $ cosign generate-key-pair\n```\n\nStore the content of `cosign.pub`, `cosign.key` and the password in GitHub Secrets.\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    sign: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n    COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}\n    COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}\n    COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}\n```\n\nNow you can verify the image f.e. `jeroenknoops/test-image:latest`:\n\n```bash\n  $ cosign verify --key cosign.pub jeroenknoops/test-image:latest\n```\n\nYou will get a result when the image is valid.\n\n##### Keyless\n\nYou don't need to provide the COSIGN environment variables in order to actually sign it.\nInstead we're using GitHub OIDC. This means you have to given the workflow premission to use\nthe `id-token`.\n\n```yaml\n    permissions:\n      id-token: write\n```\n\nNow you can start signing and adding the attestations without using keys.\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    sign: true\n    sbom: true\n    slsa: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n    KEYLESS: true\n```\n\nNow you can verify the image f.e. `jeroenknoops/test-image:latest`:\nKeyless siging is still an expermental feature of cosign, so you need to set the flag.\n\n```bash\n  $ export COSIGN_EXPERIMENTAL=1\n  $ cosign verify --key cosign.pub jeroenknoops/test-image:latest\n```\n\nYou will get a result when the image is valid.\n\nIn the log you will also find a tlog index, which can be used in a web UI to view the attestations.\nThis is an example: [signature test-docker-ci-scripts image](https://search.sigstore.dev/?logIndex=6045530)\n\n\u003e For all the examples below we assume you bring your own keys.. obviously you can also use keyless signing there.\n\n#### With SLSA Provenance:\n\n```yaml\n- name: Build Docker Images\n  id: docker\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    slsa-provenance: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n- name: Show provenance\n  run: |\n    cat ${{ steps.docker.outputs.slsa-provenance-file }}\n```\n\n#### With SLSA Provenance attached to Image:\n\nYou can use Cosign to attach the Provenance file to the image. Obviously you will need to set\nthe COSIGN environment variables. (see #sign how to generate the key-pair)\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    slsa-provenance: true\n    sign: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n    COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}\n    COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}\n    COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}\n```\n\nNow you can verify the attestation for a certain docker-repo f.e. `jeroenknoops/test-image:latest`:\n\n```bash\n  $ cosign verify-attestation --key cosign.pub jeroenknoops/test-image:latest | jq '.payload |= @base64d | .payload | fromjson | select(.predicateType==\"https://slsa.dev/provenance/v0.2\" ) | .'\n```\n\nThis is nice, because you can see how and when the image was build, without downloading it!\nYou can inspect the provenance and decide on whether you want use the image.\n\n#### With Software Bill of Material (SBOM):\n\n```yaml\n- name: Build Docker Images\n  id: docker\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    sbom: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n- name: Show SBOM\n  run: |\n    cat ${{ steps.docker.outputs.sbom-file }}\n```\n\n#### With Software Bill of Material (SBOM) attached to Image:\n\nYou can use Cosign to attach the SBOM file to the image. Obviously you will need to set\nthe COSIGN environment variables. (see #sign how to generate the key-pair)\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    sbom: true\n    sign: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n    COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}\n    COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}\n    COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}\n```\n\nNow you can verify the attestation for a certain docker-repo f.e. `jeroenknoops/test-image:latest`:\n\n```bash\n$ cosign verify-attestation --key cosign.pub jeroenknoops/test-image:latest | jq '.payload |= @base64d | .payload | fromjson | select( .predicateType==\"https://spdx.dev/Document\" ) | .predicate.Data | fromjson | .'\n```\n\n#### With SLSA-Provenance and Software Bill of Material (SBOM) attached to Image:\n\nYou can use Cosign to attach the SBOM file and the SLSA-provenance file to the image. Obviously you will need to set\nthe COSIGN environment variables. (see #sign how to generate the key-pair)\n\n```yaml\n- name: Build Docker Images\n  uses: philips-software/docker-ci-scripts@v4.5.0\n  with:\n    dockerfile: .\n    image-name: image-name-here\n    tags: latest 0.1\n    push-branches: main develop\n    sbom: true\n    sign: true\n    slsa-provenance: true\n  env:\n    REGISTRY_USERNAME: ${{ github.actor }}\n    REGISTRY_TOKEN: ${{ github.token }}\n    REGISTRY_URL: ghcr.io/organization-here\n    GITHUB_ORGANIZATION: organization-here\n    COSIGN_PRIVATE_KEY: ${{ secrets.COSIGN_PRIVATE_KEY }}\n    COSIGN_PASSWORD: ${{ secrets.COSIGN_PASSWORD }}\n    COSIGN_PUBLIC_KEY: ${{ secrets.COSIGN_PUBLIC_KEY }}\n```\n\nNow you can verify the attestation for a certain docker-repo f.e. `jeroenknoops/test-image:latest`:\n\n```bash\n$ cosign verify-attestation --key cosign.pub jeroenknoops/test-image:latest | jq '.payload |= @base64d | .payload | fromjson | select( .predicateType==\"https://spdx.dev/Document\" ) | .predicate.Data | fromjson | .'\n$ cosign verify-attestation --key cosign.pub jeroenknoops/test-image:latest | jq '.payload |= @base64d | .payload | fromjson | select(.predicateType==\"https://slsa.dev/provenance/v0.2\" ) | .'\n```\n\nThis is nice, because you can see the SBOM of the image, without downloading it!\nYou can inspect the SBOM and decide on whether you want use the image.\n\n#### Automatically create major minor and patch versions\n\nSometimes you want to automatically create major, minor and patch releases for certain tags in the repository.\nFor example when you create a git tag: `v2.32.1` you might want to automatically create versions: `2`, `2.32`, and `2.32.1`.\n\nThis can be done with a small snippet:\n\n```yaml\n- name: SplitTag\n  if: startsWith(github.ref, 'refs/tags/v')\n  run: |\n    refIN=${GITHUB_REF##*/}\n    arrIN=(${refIN//./ })\n    echo \"major=${arrIN[0]}\" \u003e\u003e $GITHUB_ENV\n    echo \"minor=${arrIN[0]}.${arrIN[1]}\" \u003e\u003e $GITHUB_ENV\n    echo \"patch=${arrIN[0]}.${arrIN[1]}.${arrIN[2]}\" \u003e\u003e $GITHUB_ENV\n\n- name: Set no tag\n  if: startsWith(github.ref, 'refs/tags/v') == false\n  run: |\n    echo \"major=\" \u003e\u003e $GITHUB_ENV\n    echo \"minor=\" \u003e\u003e $GITHUB_ENV\n    echo \"patch=\" \u003e\u003e $GITHUB_ENV\n\n- uses: philips-software/docker-ci-scripts@v4.2.0\n  with:\n    dockerfile: \"./docker/Dockerfile\"\n    image-name: \"node\"\n    tags: \"latest ${{ env.major }} ${{ env.minor }} ${{ env.patch }}\"\n    push-on-git-tag: \"true\"\n  env:\n    REGISTRY_USERNAME: ${{ secrets.REGISTRY_USERNAME }}\n    REGISTRY_TOKEN: \"${{ secrets.REGISTRY_TOKEN }}\"\n    DOCKER_ORGANIZATION: myDockerOrganization\n```\n\nThanks to [@daantimmer](https://github.com/daantimmer) to provide this snippet.\n\n## Example projects\n\n- [philips-software/docker-node](https://github.com/philips-software/docker-node)\n- [philips-software/docker-blackduck](https://github.com/philips-software/docker-blackduck)\n- [philips-software/docker-openjdk](https://github.com/philips-software/docker-openjdk)\n- [philips-software/docker-goss](https://github.com/philips-software/docker-goss)\n- [philips-software/docker-bats](https://github.com/philips-software/docker-bats)\n- [philips-software/docker-scala](https://github.com/philips-software/docker-scala)\n\n## Breaking changes v3.0.0\n\nThe `docker build` command is now being called from the root of the project\ninstead of the directory.\n\nThis has impact when your project has these two things:\n\n- Directories with dockerfiles\n- The dockerfile contains an `ADD` or a `COPY` command.\n\nYou now need to change the path to include the directory.\n\nExample:\n\n- `ADD /scripts/entrypoint.sh entrypoint.sh` becomes: `ADD /6/java/scripts/entrypoint.sh entrypoint`\n\n## Contributors\n\n[Thanks goes to these contributors](https://github.com/philips-software/docker-ci-scripts/graphs/contributors)!\n\n## License\n\n[MIT License](./LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Fdocker-ci-scripts","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphilips-software%2Fdocker-ci-scripts","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphilips-software%2Fdocker-ci-scripts/lists"}