Skip to content

feat(projects): add jenkins, microsoft teams, telegram integrations - #435

Open
henrysachs wants to merge 6 commits into
masterfrom
feat/integrations-jenkins-teams-telegram
Open

henrysachs wants to merge 6 commits into
masterfrom
feat/integrations-jenkins-teams-telegram

Conversation

@henrysachs

@henrysachs henrysachs commented Oct 14, 2026 •

Copy link
Copy Markdown
Collaborator

Description of your changes

Refs #250

Why

Users cannot manage the GitLab project integrations for Jenkins, Microsoft Teams, or Telegram with the provider. This change adds a managed resource for each one. All three follow the IntegrationHarbor pattern.

What changed

  • New kinds IntegrationJenkins, IntegrationMicrosoftTeams, and IntegrationTelegram in projects.gitlab.m.crossplane.io and projects.gitlab.crossplane.io.
  • Each controller reads its secret from a secret reference. Teams and Telegram send the webhook or token on every create and update, because GitLab rejects a set request without it. The Jenkins password is optional. Without a password reference, the controller omits the password and GitLab keeps the stored value.
  • projectIdRef and projectIdSelector resolve to a Project.
  • Bool fields are not late-initialized on any of the three kinds (Jenkins enableSslVerification and *Events; Teams and Telegram notifyOnlyBrokenPipelines and *Events): GitLab can return null, which client-go decodes as false. An unset field stays unset and is not compared; atProvider still shows observed values. Fixes bug(projects): IntegrationJenkins late-inits null enableSslVerification as false #447

Scope

  • The password, webhook, and token are write-only. GitLab never returns them, so the provider cannot detect drift on them. A new secret value reaches GitLab only when another field drifts. The field docs say this.
  • No Telegram hostname or thread, and no notifyOnlyWhenPipelineStatusChanges or useInheritedSettings. The client-go option structs have no such fields.
  • The other integrations in Support external application project integrations #250 are not in this PR.

Blast Radius

The change adds new files and one registration line per kind in the shared setup and register files. Existing resources are not affected.

Verification

  • Unit table tests for the client helpers and the three controllers. The create and update tests check the exact options sent to GitLab. make generate leaves no diff. golangci-lint reports 0 issues on the touched packages.
  • Live test on GitLab 19.4.2-ee with a scratch project and dummy secrets. All three resources became Ready and Synced, and GitLab showed the spec values. I changed the Jenkins project name, the Teams branch filter, and the Telegram room in GitLab. The provider reverted all three within one 15s poll. Delete set active: false on all three integrations.
  • Not verified: delivery to a real Jenkins, Teams, or Telegram endpoint. The cluster-scoped kinds and projectIdRef resolution were not tested live.

I have:

  • Read and followed Crossplane's contribution process.
  • Run make reviewable test to ensure this PR is ready for review. I ran the parts separately: make generate, go build ./..., go test on the touched packages, and golangci-lint.

Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
…ns, teams, telegram

Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
GitLab answers a project_name with leading or trailing whitespace with HTTP 500.

Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
GitLab can return null, decoded as false by client-go.

Fixes #447

Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
GitLab can return null, decoded as false by client-go.

Refs #447

Signed-off-by: Henry Sachs <henry.sachs@deutschebahn.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(projects): IntegrationJenkins late-inits null enableSslVerification as false

1 participant