diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 00000000..a094248b --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,105 @@ +name: Component Testing + +on: + pull_request: + push: + branches: [ '**' ] + +jobs: + run_ci_check_job: + runs-on: ubuntu-latest + outputs: + run_ci: ${{ steps.github_cli.outputs.check }} + steps: + - name: 'Check if branch has an existing pull request and the trigger was a push' + id: github_cli + run: | + pull_request=$(gh pr list -R ${{ github.repository }} -H ${{ github.ref_name }} --json url --state open --limit 1 | jq '.[0].url') + # If the branch has a PR and this run was triggered by a push event, do not run + if [[ "$pull_request" != "null" && "$GITHUB_REF_NAME" != "main" && "${{ github.event_name == 'push' }}" == "true" && "${{ !contains(github.event.head_commit.message, 'ci force') }}" == "true" ]]; then + echo "check=false" >> $GITHUB_OUTPUT + else + echo "check=true" >> $GITHUB_OUTPUT + fi + env: + GH_TOKEN: ${{ github.token }} + + # phase 1 + list: + needs: run_ci_check_job + runs-on: ubuntu-latest + if: ${{ needs.run_ci_check_job.outputs.run_ci == 'true' }} + + outputs: + matrix: ${{ steps.set_matrix.outputs.matrix }} + + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get head git commit message + id: get_head_commit_message + run: echo "HEAD_COMMIT_MESSAGE=$(git show -s --format=%s ${{ github.event.pull_request.head.sha || github.sha }})" >> "$GITHUB_OUTPUT" + + - uses: viash-io/viash-actions/setup@v5 + + - name: Check if all config can be parsed if there is no unicode support + run: | + LANG=C viash ns list > /dev/null + + - name: Get changed files + id: changed-files + uses: tj-actions/changed-files@v42 + with: + separator: ";" + diff_relative: true + + - id: ns_list + uses: viash-io/viash-actions/ns-list@v5 + with: + platform: docker + format: json + query: ^(?!workflows) + + - id: ns_list_filtered + uses: viash-io/viash-actions/project/detect-changed-components@v5 + with: + input_file: "${{ steps.ns_list.outputs.output_file }}" + + - id: set_matrix + run: | + echo "matrix=$(jq -c '[ .[] | + { + "name": (.functionality.namespace + "/" + .functionality.name), + "config": .info.config, + "dir": .info.config | capture("^(?