ci: decommission CircleCI (#7677) - #7680
Open
Hugo Dupras (jabesq) wants to merge 4 commits into
Open
Hugo Dupras (jabesq) wants to merge 4 commits into
Hugo Dupras (jabesq) wants to merge 4 commits into
Conversation
All CircleCI build, manifest and release jobs were already commented out since #7460, leaving only ensure_formatting, base_linter, linter and test — each one fully duplicated by .github/workflows/ci-lint-format.yml and ci-tests-connectors.yml. Keeping both systems alive duplicated compute and doubled the signal on every pull request. Verified before removal: - .github/scripts and .github/actions contain no reference to .circleci or vars.yml. - FIPS variants come from the presence of a Dockerfile_fips, not from .circleci/vars.yml. - Python versions come from each connector's own Dockerfile. - No repository or organization ruleset requires the "ci/circleci: *" status checks, so removing them cannot block merges. - shared/tools/ci/detect-base-branch.sh is shared by both CI systems and is kept. This does not stop CircleCI on its own: the project must also be disconnected in the CircleCI application (Project Settings -> Stop Building), otherwise the GitHub webhook keeps triggering failing pipelines.
The manifest-only mode is retained, but it is no longer justified by CircleCI: on a platform CalVer tag push, build-all-connectors.yml triggers on that same tag and builds and pushes every connector image, so skipping the Docker build in the bulk release is what avoids building each image twice. The CIRCLE_BRANCH / RELEASE_REF variables set in build-manifest.yml are kept as CI-agnostic shims for the config schema generation script; renaming them inside the script itself is left as a follow-up.
Replaces the CircleCI badge with the build workflow badge, and rewrites the CI sections of the Copilot instructions to list the GitHub Actions workflows that now run linting, tests, manifest generation, image builds and releases. Also documents that FIPS variants are derived from the presence of a Dockerfile_fips and that Python versions come from each connector's own Dockerfile, since the central .circleci/vars.yml list no longer exists.
#7677) The pycti / connectors-sdk git-ref rewriting previously performed by the CircleCI dynamic templates is reproduced by .github/actions/build-connector-image, so the portspoof and export-file-ods Dockerfiles still need git at install time. Their comments are re-pointed to the composite action rather than dropped, to keep that requirement documented. The remaining CircleCI mentions in the test-requirements.txt detection hints and in the config schema generation script are made CI-agnostic.
Hugo Dupras (jabesq)
requested review from
Helene Nguyen (helene-nguyen) and
Nicolas Carenton (ncarenton)
September 11, 2026 16:26
Contributor
There was a problem hiding this comment.
Pull request overview
This PR decommissions CircleCI and aligns CI documentation, workflows, and references with GitHub Actions.
Changes:
- Removes obsolete CircleCI configuration and tooling.
- Updates release workflow rationale and CI-related comments.
- Refreshes badges, pipeline documentation, and build/test references.
Reviewed changes
Copilot reviewed 15 out of 15 changed files in this pull request and generated no comments.
Show a summary per file
| File | Reviewed change |
|---|---|
shared/tools/composer/generate_connectors_config_schemas/generate_connectors_config_json_schemas.sh |
Makes CI references CI-agnostic. |
README.md |
Replaces the CircleCI badge with a GitHub Actions badge. |
internal-export-file/export-file-ods/Dockerfile |
Updates the build-action dependency comment. |
external-import/tenable-security-center/tests/test-requirements.txt |
Updates the CI test-runner reference. |
external-import/portspoof/Dockerfile |
Updates the build-action dependency comment. |
connectors-sdk/tests/test-requirements.txt |
Updates the CI test-runner reference. |
.github/workflows/release-connector.yml |
Reframes manifest-only release behavior. |
.github/workflows/release-bulk-connectors.yml |
Updates GitHub Actions release documentation. |
.github/workflows/build-manifest.yml |
Updates legacy CI variable documentation. |
.github/copilot-instructions.md |
Documents the active GitHub Actions pipeline; a minor nit requests qualification of Python-version guidance for UBI9. |
.circleci/vars.yml |
Removes obsolete CircleCI settings. |
.circleci/templates/dynamic.yml.j2 |
Removes the obsolete CircleCI template. |
.circleci/scripts/requirements.txt |
Removes obsolete generator dependencies. |
.circleci/scripts/generate_ci.py |
Removes the obsolete CI generator. |
.circleci/config.yml |
Removes the obsolete CircleCI workflow configuration. |
Suppressed comments (1)
.github/copilot-instructions.md:160
- This statement is too broad for the UBI9 path:
build-ubi9.ymlpasses the shared rootDockerfile_ubi9, which hard-codespython3.12, rather than using each connector's Dockerfile. Please qualify the per-connector Python-version rule to Alpine/default builds and document the shared UBI9 Dockerfile so contributors do not look in the wrong file when changing that image.
Build variants are derived from the connector directory itself: a **FIPS** image is built when a `Dockerfile_fips` exists alongside the `Dockerfile`, and the Python version comes from the connector's own `Dockerfile`.
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Hugo Dupras (jabesq)
marked this pull request as draft
September 14, 2026 07:54
Hugo Dupras (jabesq)
marked this pull request as ready for review
September 16, 2026 07:12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Bye Bye CircleCI
Proposed changes
.circleci/(config.yml,vars.yml,templates/dynamic.yml.j2,scripts/generate_ci.py,scripts/requirements.txt, −639 lines). Since ci: decommission CircleCI build and notification jobs now that GitHub Actions publishes images #7460 all Docker build, manifest and release jobs were already commented out, leaving onlyensure_formatting,base_linter,linterandtest— each one fully duplicated by.github/workflows/ci-lint-format.ymlandci-tests-connectors.yml. Keeping both systems alive duplicated compute and doubled the signal on every pull request.build-manifest.yml,release-connector.yml,release-bulk-connectors.yml) — the manifest-only release mode is retained but re-justified without CircleCI: on a platform CalVer tag push,build-all-connectors.ymltriggers on that same tag and builds and pushes every connector image, so skipping the Docker build in the bulk release is precisely what avoids building each image twice. Tag, GitHub Release, manifest fragment andcontainer_versioncommit-back are still fully produced.README.mdswaps the CircleCI badge for thebuild-all-connectors.ymlbuild badge, and.github/copilot-instructions.mdnow lists the actual workflows (lint/format, tests, manifest, Alpine/UBI9 builds, releases). It also documents that FIPS variants are derived from the presence of aDockerfile_fipsand Python versions from each connector's ownDockerfile, now that the central.circleci/vars.ymllist is gone.pycti/connectors-sdkgit-ref rewriting formerly done by the CircleCI dynamic templates is reproduced by.github/actions/build-connector-image, so theportspoofandexport-file-odsDockerfiles still genuinely needgitat install time; their comments are re-pointed to the composite action rather than dropped, to keep that requirement documented. The remaining mentions in thetest-requirements.txtdetection hints and ingenerate_connectors_config_json_schemas.share made CI-agnostic.Related issues
Checklist
Further comments
Why "tested with different use cases" is unchecked. This change removes a CI configuration and refreshes comments; no runtime connector code path is modified (hence no refactoring box either). It was verified statically rather than exercised at runtime:
.github/scripts/and.github/actions/contain no reference to.circleci/orvars.yml.Dockerfile_fips(build_alpine_matrix.py), not from.circleci/vars.yml.Dockerfile, not from.circleci/vars.yml.ci/circleci: *status checks, so removing them cannot block merges.shared/tools/ci/detect-base-branch.shis shared by both CI systems and is kept.flake8 --ignore=E,W, thelinter_stix_id_generatorpylint plugin, andrun_test.sh).On signing: all four commits are signed — with an SSH key rather than a GPG key — and show as Verified on GitHub.
.circleci/config.ymldoes not stop CircleCI on its own: the GitHub webhook survives, so pipelines keep being triggered and keep failing. After merge, the project must also be disconnected in the CircleCI application:DELETE /api/v2/project/<project-slug>;Deliberately deferred.
CIRCLE_BRANCH/CIRCLE_TAGare intentionally kept as CI-agnostic shims inrun_test.shand in the config schema generation scripts — they keep working under GitHub Actions (build-manifest.ymlsets them explicitly so the script takes its intended diff path). Renaming them is a conscious follow-up, tracked by aTODOreferencing #7677, not an oversight.