name: "Pull Request: Validate" on: pull_request: types: - opened - reopened - ready_for_review - synchronize concurrency: group: ${{ github.head_ref }}-pr-validate cancel-in-progress: true permissions: contents: read jobs: prepare: name: Prepare data required for workflow runs-on: ubuntu-24.04 outputs: repoConfiguration: ${{ steps.repo-config.outputs.config }} addedOrModifiedFiles: ${{ steps.added-modified-files.outputs.changed_files }} chartsToLint: ${{ steps.charts-to-lint.outputs.filteredCharts }} chartsToInstall: ${{ steps.charts-to-install.outputs.filteredCharts }} steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Grab repository configuration id: repo-config shell: bash run: | echo "config=$(yq '.' '.ci/repo-config.yaml' -o json -I=0)" >> "$GITHUB_OUTPUT" - name: Get all added or modified files id: added-modified-files uses: bjw-s-labs/action-changed-files@b1144fc772fca235a50902c7bb6cc431cc7d8e27 # v0.3.2 - name: Get all added or modified charts id: changed-charts uses: bjw-s-labs/action-changed-files@b1144fc772fca235a50902c7bb6cc431cc7d8e27 # v0.3.2 with: path: charts include_only_directories: true max_depth: 2 - name: Determine charts to lint id: charts-to-lint uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: CHANGED_CHARTS: ${{ steps.changed-charts.outputs.changed_files }} REPO_SETTINGS: ${{ steps.repo-config.outputs.config }} with: script: | const { CHANGED_CHARTS, REPO_SETTINGS } = process.env; const changedCharts = JSON.parse(CHANGED_CHARTS); const repoSettings = JSON.parse(REPO_SETTINGS); const chartsToFilter = repoSettings['excluded-charts-lint']; let filteredCharts = changedCharts.filter(item => chartsToFilter.indexOf(item) < 0); core.setOutput("filteredCharts", filteredCharts); console.log('charts to lint:', JSON.stringify(filteredCharts, null, 2)); - name: Determine charts to install id: charts-to-install uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1 env: CHANGED_CHARTS: ${{ steps.changed-charts.outputs.changed_files }} REPO_SETTINGS: ${{ steps.repo-config.outputs.config }} with: script: | const { CHANGED_CHARTS, REPO_SETTINGS } = process.env; const changedCharts = JSON.parse(CHANGED_CHARTS); const repoSettings = JSON.parse(REPO_SETTINGS); const chartsToFilter = repoSettings['excluded-charts-install']; let filteredCharts = changedCharts.filter(item => chartsToFilter.indexOf(item) < 0); core.setOutput("filteredCharts", filteredCharts); console.log('charts to install:', JSON.stringify(filteredCharts, null, 2)); pre-commit-check: name: Perform Pre-Commit check runs-on: ubuntu-24.04 needs: - prepare steps: - name: Checkout uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false - name: Run against changes uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # v3.0.1 with: extra_args: --files ${{ join(fromJSON(needs.prepare.outputs.addedOrModifiedFiles), ' ') }} --config .ci/pre-commit/config.yaml charts-lint: name: Lint charts uses: ./.github/workflows/charts-lint.yaml needs: - prepare with: charts: ${{ needs.prepare.outputs.chartsToLint }} charts-test: name: Test charts uses: ./.github/workflows/charts-test.yaml needs: - prepare with: charts: ${{ needs.prepare.outputs.chartsToInstall }}