Skip to content

Adds GitOps Toolkit EventRecorder to ArtifactGenerator reconciler#310

Merged
matheuscscp merged 2 commits intofluxcd:mainfrom
renatovassaomb:rv/gotk-event-recorder
Feb 11, 2026
Merged

Adds GitOps Toolkit EventRecorder to ArtifactGenerator reconciler#310
matheuscscp merged 2 commits intofluxcd:mainfrom
renatovassaomb:rv/gotk-event-recorder

Conversation

@renatovassaomb
Copy link
Copy Markdown
Contributor

@renatovassaomb renatovassaomb commented Feb 3, 2026

Summary

Adding GitOps Toolkit EventRecorder to ArtifactGenerator Reconciler.

This will make generated events to be forwarded to the specified event recorder webhook, which usually is the notifications controller.

Fixes #307.

Changes

  • GitOps Toolkit EventRecorder is now embedded into ArtifactGeneratorReconciler.
  • Error notifications are sent to events address.
  • ArtifactGenerator updates resulting in ExternalArtifact changes are grouped and sent as single event to event recorder webhook.

Testing

  1. Create kind cluster, build docker image and load it
kind create cluster
docker build -t fluxcd/source-watcher:latest .
kind load docker-image fluxcd/source-watcher:latest
  1. Deploy notifications controller
flux install --components="notification-controller"
  1. Set --events-addr flag in source-watcher Deployment and deploy it
pushd config/manager
kustomize edit add patch  --patch '[{"op": "add", "path": "/spec/template/spec/containers/0/args/-", "value": "--events-addr=http://notification-controller.flux-system.svc.cluster.local."}]' --name source-watcher --kind Deployment
popd
make dev-deploy
  1. Create GitRepo and ArtifactGenerator
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: podinfo
  namespace: default
spec:
  interval: 5m0s
  url: https://github.com/stefanprodan/podinfo
  ref:
    branch: master
---
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: my-app
spec:
  sources:
    - alias: podinfo
      kind: GitRepository
      name: podinfo
  artifacts:
    - name: my-app-composite
      copy:
        - from: "@podinfo/**"
          to: "@artifact/my-app/"
  1. Check for discarted event logs in notification-controller:
k logs -n flux-system deploy/notification-controller | tail
{"level":"info","ts":"2026-02-09T15:11:09.729Z","msg":"Starting EventSource","controller":"receiver","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Receiver","source":"kind source: *v1.PartialObjectMetadata"}
{"level":"info","ts":"2026-02-09T15:11:09.729Z","msg":"Starting EventSource","controller":"alert","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Alert","source":"kind source: *v1beta3.Alert"}
{"level":"info","ts":"2026-02-09T15:11:09.729Z","msg":"Starting EventSource","controller":"receiver","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Receiver","source":"kind source: *v1.Receiver"}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting Controller","controller":"provider","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Provider"}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting workers","controller":"provider","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Provider","worker count":4}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting Controller","controller":"receiver","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Receiver"}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting workers","controller":"receiver","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Receiver","worker count":4}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting Controller","controller":"alert","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Alert"}
{"level":"info","ts":"2026-02-09T15:11:09.830Z","msg":"Starting workers","controller":"alert","controllerGroup":"notification.toolkit.fluxcd.io","controllerKind":"Alert","worker count":4}
{"level":"info","ts":"2026-02-09T15:11:21.104Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"683"}}
  1. Check for ArtifactGenerator events:
k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator 
LAST SEEN   TYPE      REASON              OBJECT                     MESSAGE
31s         Warning   SourceFetchFailed   artifactgenerator/my-app   get sources failed: source 'GitRepository/default/podinfo' is not ready
24s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb
24s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 1 artifact(s)
24s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb)
  1. Update ArtifactGenerator including a new source and artifact but with error in spec since duplicate artifact name is used (my-app-composite):
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: my-app
spec:
  sources:
    - alias: podinfo
      kind: GitRepository
      name: podinfo
    - alias: podinfo2
      kind: GitRepository
      name: podinfo
  artifacts:
    - name: my-app-composite
      copy:
        - from: "@podinfo/**"
          to: "@artifact/my-app/"
    - name: my-app-composite
      copy:
        - from: "@podinfo2/**"
          to: "@artifact/my-app2/"
  1. An error notification should be sent to notification controller:
k logs -n flux-system deploy/notification-controller | tail -n 3
{"level":"info","ts":"2026-02-09T15:11:21.104Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"683"}}
{"level":"info","ts":"2026-02-09T15:11:28.346Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"685"}}
{"level":"info","ts":"2026-02-09T15:12:09.734Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"822"}}

k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator
LAST SEEN   TYPE      REASON              OBJECT                     MESSAGE
66s         Warning   SourceFetchFailed   artifactgenerator/my-app   get sources failed: source 'GitRepository/default/podinfo' is not ready
59s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb
59s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 1 artifact(s)
59s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb)
18s         Warning   ValidationFailed    artifactgenerator/my-app   duplicate artifact name 'my-app-composite' found
  1. Fix spec by using a different name for second artifact (my-app-composite2):
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: my-app
spec:
  sources:
    - alias: podinfo
      kind: GitRepository
      name: podinfo
    - alias: podinfo2
      kind: GitRepository
      name: podinfo
  artifacts:
    - name: my-app-composite
      copy:
        - from: "@podinfo/**"
          to: "@artifact/my-app/"
    - name: my-app-composite2
      copy:
        - from: "@podinfo2/**"
          to: "@artifact/my-app2/"
  1. A notification should be received by notification-controller as there is a new artifact:
k logs -n flux-system deploy/notification-controller | tail -n 4
{"level":"info","ts":"2026-02-09T15:11:21.104Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"683"}}
{"level":"info","ts":"2026-02-09T15:11:28.346Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"685"}}
{"level":"info","ts":"2026-02-09T15:12:09.734Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"822"}}
{"level":"info","ts":"2026-02-09T15:12:45.818Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"902"}}

k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator
LAST SEEN   TYPE      REASON              OBJECT                     MESSAGE
106s        Warning   SourceFetchFailed   artifactgenerator/my-app   get sources failed: source 'GitRepository/default/podinfo' is not ready
99s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb
99s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 1 artifact(s)
99s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb)
58s         Warning   ValidationFailed    artifactgenerator/my-app   duplicate artifact name 'my-app-composite' found
22s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite2 reconciled with revision latest@sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5
22s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 2 artifact(s)
22s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite2 (sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5)
  1. Make a no-op change to the resulting artifacts (switch source alias but content is the same):
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: my-app
spec:
  sources:
    - alias: podinfo
      kind: GitRepository
      name: podinfo
    - alias: podinfo2
      kind: GitRepository
      name: podinfo
  artifacts:
    - name: my-app-composite
      copy:
        - from: "@podinfo2/**"
          to: "@artifact/my-app/"
    - name: my-app-composite2
      copy:
        - from: "@podinfo/**"
          to: "@artifact/my-app2/"
  1. No notifications are send, but trace events still exist:
k logs -n flux-system deploy/notification-controller | tail -n 4
{"level":"info","ts":"2026-02-09T15:11:21.104Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"683"}}
{"level":"info","ts":"2026-02-09T15:11:28.346Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"685"}}
{"level":"info","ts":"2026-02-09T15:12:09.734Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"822"}}
{"level":"info","ts":"2026-02-09T15:12:45.818Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"902"}}

k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator
LAST SEEN   TYPE      REASON              OBJECT                     MESSAGE
2m12s       Warning   SourceFetchFailed   artifactgenerator/my-app   get sources failed: source 'GitRepository/default/podinfo' is not ready
2m5s        Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb
2m5s        Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 1 artifact(s)
2m5s        Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb)
84s         Warning   ValidationFailed    artifactgenerator/my-app   duplicate artifact name 'my-app-composite' found
48s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite2 reconciled with revision latest@sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5
11s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 2 artifact(s)
48s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite2 (sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5)
  1. Now change both artifacts and a single notification should be received:
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: my-app
spec:
  sources:
    - alias: podinfo
      kind: GitRepository
      name: podinfo
    - alias: podinfo2
      kind: GitRepository
      name: podinfo
  artifacts:
    - name: my-app-composite
      copy:
        - from: "@podinfo2/**"
          to: "@artifact/my-app3/"
    - name: my-app-composite2
      copy:
        - from: "@podinfo/**"
          to: "@artifact/my-app4/"
  1. Check logs and events
k logs -n flux-system deploy/notification-controller | tail -n 5                                           
{"level":"info","ts":"2026-02-09T15:11:21.104Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"683"}}
{"level":"info","ts":"2026-02-09T15:11:28.346Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"685"}}
{"level":"info","ts":"2026-02-09T15:12:09.734Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"822"}}
{"level":"info","ts":"2026-02-09T15:12:45.818Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"902"}}
{"level":"info","ts":"2026-02-09T15:14:01.319Z","logger":"event-server","msg":"discarding event, no alerts found for the involved object","eventInvolvedObject":{"kind":"ArtifactGenerator","namespace":"default","name":"my-app","uid":"46d8f712-d69f-4ff5-aec8-d70ed1c2cd54","apiVersion":"source.extensions.fluxcd.io/v1beta1","resourceVersion":"1084"}}

k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator        
LAST SEEN   TYPE      REASON              OBJECT                     MESSAGE
4m42s       Warning   SourceFetchFailed   artifactgenerator/my-app   get sources failed: source 'GitRepository/default/podinfo' is not ready
4m35s       Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb
4m35s       Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 1 artifact(s)
4m35s       Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:a3a88d08eff70db0ca71412a62e3e0f7632919300cc611a6d42025584efab5eb)
3m54s       Warning   ValidationFailed    artifactgenerator/my-app   duplicate artifact name 'my-app-composite' found
3m18s       Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite2 reconciled with revision latest@sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5
2m2s        Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 2 artifact(s)
3m18s       Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite2 (sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5)
2m2s        Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:21f6a626fe6ad23fc6fb1c02b60daa8cbbc2e116d760b4e222e6a558d42ff04f
2m2s        Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite2 reconciled with revision latest@sha256:8d2c4cd4c64a2ba0512b3367660a6663e5cebdfe17204a7bf2d91cb571f8a92a
2m2s        Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:21f6a626fe6ad23fc6fb1c02b60daa8cbbc2e116d760b4e222e6a558d42ff04f)...

k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator -o json | jq '.items[-1]'
{
  "apiVersion": "v1",
  "count": 1,
  "eventTime": null,
  "firstTimestamp": "2026-02-09T15:14:01Z",
  "involvedObject": {
    "apiVersion": "source.extensions.fluxcd.io/v1beta1",
    "kind": "ArtifactGenerator",
    "name": "my-app",
    "namespace": "default",
    "resourceVersion": "1084",
    "uid": "46d8f712-d69f-4ff5-aec8-d70ed1c2cd54"
  },
  "kind": "Event",
  "lastTimestamp": "2026-02-09T15:14:01Z",
  "message": "external artifacts reconciled: default/my-app-composite (sha256:21f6a626fe6ad23fc6fb1c02b60daa8cbbc2e116d760b4e222e6a558d42ff04f)\ndefault/my-app-composite2 (sha256:8d2c4cd4c64a2ba0512b3367660a6663e5cebdfe17204a7bf2d91cb571f8a92a)",
  "metadata": {
    "creationTimestamp": "2026-02-09T15:14:01Z",
    "name": "my-app.18929cd4ce620618",
    "namespace": "default",
    "resourceVersion": "1091",
    "uid": "c7c08719-51d3-497f-87cd-49360598b946"
  },
  "reason": "Ready",
  "reportingComponent": "source-watcher",
  "reportingInstance": "",
  "source": {
    "component": "source-watcher"
  },
  "type": "Normal"
}

Signed-off-by: Renato Vassão <renato.vassao@mindbodyonline.com>
@matheuscscp
Copy link
Copy Markdown
Member

matheuscscp commented Feb 4, 2026

Hi @renatovassaomb! Thanks for this PR 🙏

If you use your other account @renatovassao you will be able to use the CI without us allowing it to run.

Also, I think we discussed in the dev meeting, this PR should not simply replace the current event recorder with the notification-controller one because the events that are currently sent are too much, it will be a lot of noise. We need to selectively send events to notification-controller for the most important ones, e.g. errors (make them aggregated i.e. do not send one error per source or per artifact), and an event when an artifact digest changes (should also be a single event for all artifacts whose digest changed).

@renatovassaomb
Copy link
Copy Markdown
Contributor Author

Hi @renatovassaomb! Thanks for this PR 🙏

If you use your other account @renatovassao you will be able to use the CI without us allowing it to run.

Also, I think we discussed in the dev meeting, this PR should not simply replace the current event recorder with the notification-controller one because the events that are currently sent are too much, it will be a lot of noise. We need to selectively send events to notification-controller for the most important ones, e.g. errors (make them aggregated i.e. do not send one error per source or per artifact), and an event when an artifact digest changes (should also be a single event for all artifacts whose digest changed).

Sounds good, thanks for the insights @matheuscscp. I wanted to get this open to make sure I was on the right track, I'll keep working on it to meet these requirements.

@renatovassaomb
Copy link
Copy Markdown
Contributor Author

@matheuscscp I updated the code to reflect the changes you specified.

For regular events, a new function notify was added to the end of the reconciliation loop which only fires once and aggregates artifacts changed.

For error events, I noticed most of them end the reconciliation loop early, meaning they will fire only once.

Is my assumption correct?

Copy link
Copy Markdown
Member

@matheuscscp matheuscscp left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For error events, I noticed most of them end the reconciliation loop early, meaning they will fire only once.

Is my assumption correct?

Correct!


for _, eaRef := range eaRefs {
if !oldObj.HasArtifactInInventory(eaRef.Name, eaRef.Namespace, eaRef.Digest) {
eaChanged = append(eaChanged, fmt.Sprintf("%s/%s", eaRef.Namespace, eaRef.Name))
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In source-controller events e.g. OCIRepository the digest is visible in the event sent to notification-controller

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good, adding the digest will make the event message a bit long, is that a problem?

> k get events --sort-by='.metadata.creationTimestamp' --field-selector involvedObject.kind=ArtifactGenerator | tail -n 5
29s         Normal    Ready               artifactgenerator/my-app   reconciliation succeeded, generated 2 artifact(s)
51s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite2 (sha256:1aa3a5e94e257be1ef637d27e6fac4d850161dc20a2bd2327e2f2a5b3fdfafd5)
29s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite reconciled with revision latest@sha256:21f6a626fe6ad23fc6fb1c02b60daa8cbbc2e116d760b4e222e6a558d42ff04f
29s         Normal    Ready               artifactgenerator/my-app   ExternalArtifact/default/my-app-composite2 reconciled with revision latest@sha256:8d2c4cd4c64a2ba0512b3367660a6663e5cebdfe17204a7bf2d91cb571f8a92a
29s         Normal    Ready               artifactgenerator/my-app   external artifacts reconciled: default/my-app-composite (sha256:21f6a626fe6ad23fc6fb1c02b60daa8cbbc2e116d760b4e222e6a558d42ff04f), default/my-app-composite2 (sha256:8d2c4cd4c64a2ba0512b3367660a6663e5cebdfe17204a7bf2d91cb571f8a92a)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think if we join the msgs with \n instead of , it will be fine 👍 @stefanprodan

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cool, updated code and description with latest changes.

@matheuscscp
Copy link
Copy Markdown
Member

Please run go mod tidy 🙏 https://github.com/fluxcd/source-watcher/actions/runs/21826093352/job/62975400590?pr=310

Signed-off-by: Renato Vassão <renato.vassao@mindbodyonline.com>
Copy link
Copy Markdown
Member

@stefanprodan stefanprodan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Thanks @renatovassaomb 🏅

@matheuscscp matheuscscp merged commit 16e901e into fluxcd:main Feb 11, 2026
6 of 8 checks passed
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.

Support ArtifactGenerator notifications

4 participants