diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2b8d8a6..a63d5aa 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -9,8 +9,7 @@ on: jobs: install-build: outputs: - foo-service: ${{ steps.install.outputs.foo-service }} - bar-service: ${{ steps.install.outputs.bar-service }} + job-strategy-matrix: ${{ steps.install.outputs.job-strategy-matrix }} runs-on: ubuntu-latest steps: - name: Checkout code @@ -23,24 +22,20 @@ jobs: echo pnpm install node ./gen-service-version.js - foo-service: + build-services: needs: [install-build] runs-on: ubuntu-latest - if: ${{ needs.install-build.outputs.foo-service == 'run' }} + if: ${{ needs.install-build.outputs.job-strategy-matrix != '[""]' }} + strategy: + matrix: + service: ${{ fromJson(needs.install-build.outputs.job-strategy-matrix) }} steps: - name: Checkout code - uses: actions/checkout@v3 - - name: Build - run: | - ./foo-service/build.sh + uses: gogaille/sparse-checkout@3114de9b3cf84c0829fe84222d8ae8d806fbc794 + with: + patterns: '${{ matrix.service }} gen-service-version.js' - bar-service: - needs: [install-build] - runs-on: ubuntu-latest - if: ${{ needs.install-build.outputs.bar-service == 'run' }} - steps: - - name: Checkout code - uses: actions/checkout@v3 - name: Build run: | - ./bar-service/build.sh + ls . + ./${{ matrix.service }}/build.sh diff --git a/bar-service/bar.sh b/bar-service/bar.sh index 019eb5d..89a1700 100755 --- a/bar-service/bar.sh +++ b/bar-service/bar.sh @@ -1,3 +1,5 @@ #!/usr/bin/env bash echo 'running bar!' +echo 'cool new feature -fixing feature' +echo 'new feature' diff --git a/foo-service/foo.sh b/foo-service/foo.sh index 14338a5..8163df7 100755 --- a/foo-service/foo.sh +++ b/foo-service/foo.sh @@ -4,3 +4,5 @@ echo 'Running foo!' echo 'fixed bug' echo 'fixed another bug' echo 'NOT ANOTHER ONE' + +echo 'adding a thing here' diff --git a/gen-service-version.js b/gen-service-version.js index f4732cc..ef781ba 100644 --- a/gen-service-version.js +++ b/gen-service-version.js @@ -1,16 +1,14 @@ -const child_process = require("child_process"); +const child_process = require('child_process'); -const services = ["bar-service", "foo-service"]; +const services = ['bar-service', 'foo-service']; function latestCommitInDirectory(dirname) { - return String( - child_process.execSync(`git log --pretty=format:%H -n 1 ${dirname}`) - ); + return String(child_process.execSync(`git log --pretty=format:%H -n 1 ${dirname}`)); } const serviceVersions = {}; -const currentCommit = latestCommitInDirectory("."); +const currentCommit = latestCommitInDirectory('.'); for (const service of services) { serviceVersions[service] = latestCommitInDirectory(service); @@ -19,8 +17,14 @@ for (const service of services) { console.log(currentCommit); console.log(serviceVersions); +let job_strategy_matrix = []; Object.entries(serviceVersions).forEach(([name, version]) => { - const skip = version === currentCommit ? "run" : "skip"; + const skip = version === currentCommit ? 'run' : 'skip'; - console.log(`::set-output name=${name}::${skip}`); + console.log(`${name}::${skip}`); + if (version === currentCommit) { + job_strategy_matrix.push(name); + } }); + +console.log(`::set-output name=job-strategy-matrix::["${job_strategy_matrix.join('", "')}"]`);