commit 50b2034d514361cb9410c97722159a6b8a6e5275 Author: Timo Behrendt Date: Tue Aug 12 08:31:34 2025 +0200 feat: add re-usable ci workflow diff --git a/.gitea/workflows/ci.yaml b/.gitea/workflows/ci.yaml new file mode 100644 index 0000000..4fd3e8a --- /dev/null +++ b/.gitea/workflows/ci.yaml @@ -0,0 +1,123 @@ +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@v4 + - 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@v4 + - uses: ./.gitea/actions/extract-namespace-from-repo-name + id: namespace + with: + repo: ${{ github.repository }} + - uses: azure/setup-kubectl@v4 + - uses: azure/k8s-set-context@v4 + with: + method: kubeconfig + kubeconfig: ${{ secrets.KUBECONFIG }} + - name: Validate k8s manifests + uses: azure/k8s-lint@v3 + 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@v4 + - uses: ./.gitea/actions/extract-namespace-from-repo-name + id: namespace + with: + repo: ${{ github.repository }} + - uses: azure/setup-kubectl@v4 + - uses: azure/setup-helm@v4 + - uses: azure/k8s-set-context@v4 + with: + method: kubeconfig + kubeconfig: ${{ secrets.KUBECONFIG }} + - name: Validate Helm + uses: helmfile/helmfile-action@v2.0.4 + 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