name: CI on: workflow_call: inputs: k8s_dir: description: "Path to Kubernetes manifests directory" required: false default: "k8s/" type: string helmfile_path: description: "Path to helmfile.yaml" required: false default: "helmfile.yaml" type: string skip_helm_validation: description: "Skip Helm validation even if helmfile.yaml exists" required: false default: false type: boolean jobs: detect-service-type: runs-on: ubuntu-latest outputs: has_helmfile: ${{ steps.check-helmfile.outputs.exists }} has_k8s: ${{ steps.check-k8s.outputs.exists }} steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - name: Check if helmfile.yaml exists id: check-helmfile run: | if [ -f "${{ inputs.helmfile_path }}" ]; then echo "exists=true" >> $GITHUB_OUTPUT echo "Found helmfile.yaml at ${{ inputs.helmfile_path }}" else echo "exists=false" >> $GITHUB_OUTPUT echo "No helmfile.yaml found at ${{ inputs.helmfile_path }}" fi - name: Check if k8s directory exists id: check-k8s run: | if [ -d "${{ inputs.k8s_dir }}" ]; then echo "exists=true" >> $GITHUB_OUTPUT echo "Found k8s directory at ${{ inputs.k8s_dir }}" else echo "exists=false" >> $GITHUB_OUTPUT echo "No k8s directory found at ${{ inputs.k8s_dir }}" fi validate-k8s: runs-on: ubuntu-latest needs: detect-service-type if: needs.detect-service-type.outputs.has_k8s == 'true' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.gitea/actions/extract-namespace-from-repo-name id: namespace with: repo: ${{ github.repository }} - uses: azure/setup-kubectl@776406bce94f63e41d621b960d78ee25c8b76ede # v4.0.1 - uses: azure/k8s-set-context@ae59a723ba9abe7a9655538854a025448dbab4aa # v4.0.2 with: method: kubeconfig kubeconfig: ${{ secrets.KUBECONFIG }} - name: Validate k8s manifests uses: azure/k8s-lint@6aefe5066f95e73d2b140d8835cc95583b886989 # v3.0.1 with: namespace: ${{ steps.namespace.outputs.namespace }} lintType: dryrun manifests: "${{ inputs.k8s_dir }}" validate-helm: runs-on: ubuntu-latest needs: detect-service-type if: | needs.detect-service-type.outputs.has_helmfile == 'true' && needs.detect-service-type.outputs.has_k8s == 'true' && inputs.skip_helm_validation != 'true' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - uses: ./.gitea/actions/extract-namespace-from-repo-name id: namespace with: repo: ${{ github.repository }} - uses: azure/setup-kubectl@776406bce94f63e41d621b960d78ee25c8b76ede # v4.0.1 - uses: azure/setup-helm@1a275c3b69536ee54be43f2070a358922e12c8d4 # v4 - uses: azure/k8s-set-context@ae59a723ba9abe7a9655538854a025448dbab4aa # v4.0.2 with: method: kubeconfig kubeconfig: ${{ secrets.KUBECONFIG }} - name: Validate Helm uses: helmfile/helmfile-action@99b1d18ad3989701cf26a54e65baf4a3ee8156b0 # v2.4.0 with: helmfile-args: diff # Summary job that always runs to show what was validated ci-summary: runs-on: ubuntu-latest needs: [ detect-service-type, validate-k8s, validate-helm ] if: always() steps: - name: CI Summary run: | echo "## CI Validation Summary" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY if [ "${{ needs.detect-service-type.outputs.has_k8s }}" == "true" ]; then echo "✅ **Kubernetes validation**: Completed" >> $GITHUB_STEP_SUMMARY else echo "❌ **Kubernetes validation**: Skipped (no k8s/ directory found)" >> $GITHUB_STEP_SUMMARY fi if [ "${{ needs.detect-service-type.outputs.has_helmfile }}" == "true" ] && [ "${{ inputs.skip_helm_validation }}" != "true" ]; then echo "✅ **Helm validation**: Completed" >> $GITHUB_STEP_SUMMARY elif [ "${{ needs.detect-service-type.outputs.has_helmfile }}" == "true" ] && [ "${{ inputs.skip_helm_validation }}" == "true" ]; then echo "⏭️ **Helm validation**: Skipped (manually disabled)" >> $GITHUB_STEP_SUMMARY else echo "⏭️ **Helm validation**: Skipped (no helmfile.yaml found)" >> $GITHUB_STEP_SUMMARY fi echo "" >> $GITHUB_STEP_SUMMARY echo "**Service Type**: ${{ needs.detect-service-type.outputs.has_helmfile == 'true' && 'Helm + Kubernetes' || 'Kubernetes Only' }}" >> $GITHUB_STEP_SUMMARY