diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3c742d8..24745ba 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -28,8 +28,48 @@ concurrency: cancel-in-progress: true jobs: + Changed: + name: Changed Files + runs-on: ubuntu-latest + + outputs: + database: ${{ steps.changed.outputs.database_any_changed }} + docker: ${{ steps.changed.outputs.docker_any_changed }} + elixir: ${{ steps.changed.outputs.elixir_any_changed }} + helm: ${{ steps.changed.outputs.helm_any_changed }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 2 + + - id: changed + name: Get Changed Files + uses: tj-actions/changed-files@v42 + with: + files_yaml: | + database: + - '.github/workflows/ci.yaml' + - 'priv/*repo/**' + docker: + - '.github/workflows/ci.yaml' + - 'Dockerfile' + elixir: + - '.github/workflows/ci.yaml' + - 'priv/**' + - '**.ex' + - '**.exs' + - '**.heex' + helm: + - '.github/workflows/ci.yaml' + - '.github/workflows/staging.yaml' + - '.github/workflows/production.yaml' + - 'helm/**' + Credo: - if: ${{ !startsWith(github.head_ref, 'release-please--branches') }} + if: ${{ !startsWith(github.head_ref, 'release-please--branches') && needs.Changed.outputs.elixir == 'true' }} + needs: [Changed] runs-on: ubuntu-latest steps: @@ -48,7 +88,8 @@ jobs: run: mix credo --strict Dependencies: - if: ${{ !startsWith(github.head_ref, 'release-please--branches') }} + if: ${{ !startsWith(github.head_ref, 'release-please--branches') && needs.Changed.outputs.elixir == 'true' }} + needs: [Changed] runs-on: ubuntu-latest steps: @@ -67,7 +108,8 @@ jobs: run: mix deps.unlock --check-unused Dialyzer: - if: ${{ !startsWith(github.head_ref, 'release-please--branches') }} + if: ${{ !startsWith(github.head_ref, 'release-please--branches') && needs.Changed.outputs.elixir == 'true' }} + needs: [Changed] runs-on: ubuntu-latest steps: @@ -86,7 +128,8 @@ jobs: run: mix dialyzer --format github Documentation: - if: ${{ !startsWith(github.head_ref, 'release-please--branches') }} + if: ${{ !startsWith(github.head_ref, 'release-please--branches') && needs.Changed.outputs.elixir == 'true' }} + needs: [Changed] runs-on: ubuntu-latest steps: @@ -105,7 +148,8 @@ jobs: run: mix docs Format: - if: ${{ !startsWith(github.head_ref, 'release-please--branches') }} + if: ${{ !startsWith(github.head_ref, 'release-please--branches') && needs.Changed.outputs.elixir == 'true' }} + needs: [Changed] runs-on: ubuntu-latest steps: diff --git a/.github/workflows/pr.yaml b/.github/workflows/pr.yaml index 993200f..ed73b4a 100644 --- a/.github/workflows/pr.yaml +++ b/.github/workflows/pr.yaml @@ -19,15 +19,31 @@ jobs: steps: - name: Check - uses: stordco/actions-pr-title@v1.0.0 + uses: actions/github-script@v7 with: - regex: '^(feat!|fix!|fix|feat|chore|(fix|feat|chore)\(\w.*\)):\s(\[\w{1,8}-\d{1,8}\]|.*).*' - hint: | - Your PR title does not match the Stord common convention. Please rename your PR to match one of the following formats: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const title = context.payload?.pull_request?.title; - chore: a small insignificant change - fix: [JIRA-1234] fix an existing feature - feat: [JIRA-1234] a new feature to release - feat!: a breaking change + if (typeof title !== 'string') { + core.info("Pull request data not in payload. Skipping PR title check."); + return; + } - Note: Adding ! (i.e. `feat!:`) represents a breaking change and will result in a SemVer major release. + const REGEX = /^(feat!|fix!|fix|feat|chore|(fix|feat|chore)\(\w.*\)):\s(\[\w{1,8}-\d{1,8}\]|.*).*/; + + if (!REGEX.test(title)) { + core.setFailed("Pull request title does not follow conventional commits"); + console.log(` + Pull Request title "${title}" does not follow our [conventional commits](https://www.conventionalcommits.org/en/v1.0.0/) naming scheme. + + Please try renaming the PR to match one of these examples: + + chore: a small insignificant change + fix: [JIRA-1234] fix an existing feature + feat: [JIRA-1234] a new feature to release + feat!: a breaking change + + Note: Adding ! (i.e. \`feat!:\`) represents a breaking change and will result in a SemVer major release. + `.trim()); + }