Visitar URL original
GitHub - somaz94/kube-diff-action: GitHub Action to detect Kubernetes manifest drift against live cluster state with PR comments Β· GitHub
Skip to content

About

GitHub Action to detect Kubernetes manifest drift against live cluster state with PR comments

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Use this GitHub action with your project
Add this Action to an existing workflow or create a new one
View on Marketplace

Latest commit

Β 

History

36 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

kube-diff-action

CI License: Apache 2.0 Latest Tag Top Language GitHub Marketplace

A GitHub Action that compares local Kubernetes manifests against live cluster state using kube-diff, and optionally posts the diff as a PR comment.


Features

  • Compare plain YAML, Helm charts, or Kustomize overlays against your cluster
  • Auto-post diff results as PR comments (updates existing comment on re-run)
  • Multiple output formats: color, plain, json, markdown, table
  • Ignore specific fields in diff with ignore-field
  • Configurable context lines, exit code behavior, and diff strategy
  • Compare against live state or last-applied-configuration annotation
  • Filter by namespace, kind, or label selector
  • Detects drift: changed, new, deleted, and unchanged resources

Quick Start

- name: Check for drift
  uses: somaz94/kube-diff-action@v1
  with:
    source: file
    path: ./manifests/
    namespace: production

Usage

File mode

- uses: somaz94/kube-diff-action@v1
  with:
    source: file
    path: ./manifests/
    namespace: production
    kind: Deployment,Service

Helm mode

- uses: somaz94/kube-diff-action@v1
  with:
    source: helm
    path: ./my-chart/
    values: values-prod.yaml
    release: my-release
    namespace: production

Kustomize mode

- uses: somaz94/kube-diff-action@v1
  with:
    source: kustomize
    path: ./overlays/production/

PR comment with drift detection

The comment follows output: markdown, plain and color fold each changed resource's diff into a collapsible section, while json and table are posted as a code block. A report too large for a PR comment is replaced by its summary line and a link to the workflow run.

name: Drift Check
on:
  pull_request:
    paths:
      - 'manifests/**'

jobs:
  drift-check:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4

      - name: Setup kubeconfig
        # Configure your cluster access here
        run: echo "${{ secrets.KUBECONFIG }}" > /tmp/kubeconfig

      - name: Check drift
        id: diff
        uses: somaz94/kube-diff-action@v1
        with:
          source: file
          path: ./manifests/
          namespace: production
          comment: 'true'
        env:
          KUBECONFIG: /tmp/kubeconfig

      - name: Fail if drift detected
        if: steps.diff.outputs.has-changes == 'true'
        run: |
          echo "Drift detected!"
          exit 1

Ignore fields and custom context

- uses: somaz94/kube-diff-action@v1
  with:
    source: file
    path: ./manifests/
    namespace: production
    ignore-field: metadata.annotations.checksum/config,spec.replicas
    context-lines: '5'
    exit-code: 'true'

Compare against last-applied-configuration

- uses: somaz94/kube-diff-action@v1
  with:
    source: file
    path: ./manifests/
    namespace: production
    diff-strategy: last-applied

JSON output for downstream processing

- name: Get drift report
  id: diff
  uses: somaz94/kube-diff-action@v1
  with:
    source: file
    path: ./manifests/
    output: json
    comment: 'false'

- name: Process result
  run: echo '${{ steps.diff.outputs.result }}' | jq '.resources[] | select(.status == "changed")'

Inputs

Input Description Required Default
source Source type: file, helm, or kustomize Yes
path Path to manifests, chart, or overlay Yes
values Helm values files (comma-separated) No
release Helm release name No release
namespace Filter by namespace No
kind Filter by resource kind (comma-separated) No
name Filter by resource name (comma-separated) No
selector Label selector (e.g., app=nginx,env=prod) No
output Output format: color, plain, json, markdown, table No markdown
summary-only Show summary only No false
ignore-field Field paths to ignore in diff (comma-separated, dot notation) No
context-lines Number of context lines in diff output No 3
exit-code Report exit-code as 0 even when changes are detected (has-changes still reports drift) No false
diff-strategy Comparison strategy: live or last-applied No live
comment Post result as PR comment No true
version kube-diff version to install No latest
token GitHub token for PR comments and authenticating the version lookup (raises the GitHub API rate limit) No ${{ github.token }}

Outputs

Output Description
result Full diff output text (kube-diff's stdout; warnings and errors go to the step log)
exit-code 0 = no changes, 1 = changes detected, 2 = error
has-changes true if drift was detected, false otherwise

Exit Codes

The action does not fail when drift is detected (exit-code 1). It fails only when kube-diff itself errors, for example on a bad path or an unreachable cluster, and then reports exit-code 2. Use has-changes output to control your workflow:

- name: Fail on drift
  if: steps.diff.outputs.has-changes == 'true'
  run: exit 1

Combined Usage with kube-events-action

Use kube-diff-action to detect manifest drift and kube-events-action to check cluster warnings β€” all in one workflow.

Post-deploy validation

name: Deploy & Validate
on:
  push:
    branches: [main]

jobs:
  deploy-and-validate:
    runs-on: ubuntu-latest
    permissions:
      contents: read
      pull-requests: write
    steps:
      - uses: actions/checkout@v4

      - name: Check drift before deploy
        id: diff
        uses: somaz94/kube-diff-action@v1
        with:
          source: file
          path: ./manifests/
          namespace: production
          output: markdown

      - name: Deploy if drift detected
        if: steps.diff.outputs.has-changes == 'true'
        run: kubectl apply -f ./manifests/

      - name: Check cluster events after deploy
        id: events
        uses: somaz94/kube-events-action@v1
        with:
          namespace: production
          type: Warning
          since: 5m
          threshold: '3'
          comment: 'true'

      - name: Summary
        run: |
          echo "Drift detected: ${{ steps.diff.outputs.has-changes }}"
          echo "Warnings after deploy: ${{ steps.events.outputs.warning-count }}"

Scheduled cluster health check

name: Cluster Health Check
on:
  schedule:
    - cron: '0 */6 * * *'

jobs:
  health-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Check manifest drift
        id: diff
        uses: somaz94/kube-diff-action@v1
        with:
          source: kustomize
          path: ./overlays/production/
          output: json
          comment: 'false'

      - name: Check cluster warnings
        id: events
        uses: somaz94/kube-events-action@v1
        with:
          all-namespaces: 'true'
          type: Warning
          since: 6h
          output: json
          comment: 'false'

      - name: Notify on issues
        if: steps.diff.outputs.has-changes == 'true' || steps.events.outputs.has-warnings == 'true'
        run: |
          curl -X POST "${{ secrets.SLACK_WEBHOOK }}" \
            -d "{\"text\": \"πŸ” Cluster issues detected\nDrift: ${{ steps.diff.outputs.has-changes }}\nWarnings: ${{ steps.events.outputs.warning-count }}\"}"

Related projects

  • kube-diff: Diff local manifests (plain YAML, Helm, Kustomize) against the live cluster.
  • kube-drift: An operator that runs the same manifest-vs-cluster comparison on a schedule, inside the cluster.

License

This project is licensed under the Apache License 2.0 β€” see the LICENSE file for details.

About

GitHub Action to detect Kubernetes manifest drift against live cluster state with PR comments

Topics

Resources

Code of conduct

Contributing

Security policy

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages