name: "Swift" on: pull_request: paths: - "swift/**" - "misc/bazel/**" - "*.bazel*" - .github/workflows/swift.yml - .github/actions/fetch-codeql/action.yml - codeql-workspace.yml - .pre-commit-config.yaml - "!**/*.md" - "!**/*.qhelp" branches: - main jobs: changes: runs-on: ubuntu-latest outputs: codegen: ${{ steps.filter.outputs.codegen }} ql: ${{ steps.filter.outputs.ql }} steps: - uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 id: filter with: filters: | codegen: - 'github/workflows/swift.yml' - "misc/bazel/**" - "*.bazel*" - 'swift/actions/setup-env/**' - '.pre-commit-config.yaml' - 'swift/codegen/**' - 'swift/schema.py' - 'swift/**/*.dbscheme' - 'swift/ql/lib/codeql/swift/elements.qll' - 'swift/ql/lib/codeql/swift/elements/**' - 'swift/ql/lib/codeql/swift/generated/**' - 'swift/ql/test/extractor-tests/generated/**' ql: - 'github/workflows/swift.yml' - 'swift/**/*.ql' - 'swift/**/*.qll' # not using a matrix as you cannot depend on a specific job in a matrix, and we want to start linux checks # without waiting for the macOS build build-and-test-macos: runs-on: macos-12-xl steps: - uses: actions/checkout@v3 - uses: ./swift/actions/create-extractor-pack - uses: ./swift/actions/run-quick-tests build-and-test-linux: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: ./swift/actions/create-extractor-pack - uses: ./swift/actions/run-quick-tests qltests-linux: needs: build-and-test-linux runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./swift/actions/run-ql-tests qltests-macos: needs: build-and-test-macos runs-on: macos-12-xl strategy: fail-fast: false matrix: slice: ["1/2", "2/2"] steps: - uses: actions/checkout@v3 - uses: ./swift/actions/run-ql-tests with: flags: --slice ${{ matrix.slice }} integration-tests-linux: needs: build-and-test-linux runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./swift/actions/run-integration-tests integration-tests-macos: needs: build-and-test-macos runs-on: macos-12-xl steps: - uses: actions/checkout@v3 - uses: ./swift/actions/run-integration-tests codegen: runs-on: ubuntu-latest needs: changes if: ${{ needs.changes.outputs.codegen == 'true' }} steps: - uses: actions/checkout@v3 - uses: ./swift/actions/setup-env - uses: pre-commit/action@v3.0.0 name: Check that python code is properly formatted with: extra_args: autopep8 --all-files - uses: ./.github/actions/fetch-codeql - uses: pre-commit/action@v3.0.0 name: Check that QL generated code was checked in with: extra_args: swift-codegen --all-files - name: Generate C++ files run: | bazel run //swift/codegen:codegen -- --generate=trap,cpp --cpp-output=$PWD/generated-cpp-files - uses: actions/upload-artifact@v3 with: name: swift-generated-cpp-files path: swift/generated-cpp-files/** qlformat: runs-on: ubuntu-latest needs: changes if: ${{ needs.changes.outputs.ql == 'true' }} steps: - uses: actions/checkout@v3 - uses: ./.github/actions/fetch-codeql - name: Check QL formatting run: find swift/ql "(" -name "*.ql" -or -name "*.qll" ")" -print0 | xargs -0 codeql query format --check-only