diff --git a/.github/workflows/pull-request.yml b/.github/workflows/pull-request.yml new file mode 100644 index 000000000..91cc638cf --- /dev/null +++ b/.github/workflows/pull-request.yml @@ -0,0 +1,48 @@ +name: PR Testing + +on: + pull_request: + push: + branches: + - master + +concurrency: + # In master we want to run for every commit, in other branches — only for the last one + group: ${{ + ( github.ref == 'refs/heads/master' && format('{0}/{1}/{2}', github.workflow, github.ref, github.sha) ) + || + format('{0}/{1}', github.workflow, github.ref) }} + cancel-in-progress: true + +jobs: + handle-syncwith: + if: github.event_name == 'pull_request' + name: Call Reusable SyncWith Handler + uses: NilFoundation/ci-cd/.github/workflows/reusable-handle-syncwith.yml@v1.2.1 + with: + ci-cd-ref: 'v1.1.2' + secrets: inherit + + test-linux: + name: Linux Crypto3 Testing + uses: ./.github/workflows/run_tests_linux.yml + needs: + - handle-syncwith + if: | + always() && !cancelled() && + (needs.handle-syncwith.result == 'success' || needs.handle-syncwith.result == 'skipped') + secrets: inherit + with: + submodules-refs: ${{ needs.handle-syncwith.outputs.prs-refs }} + + test-mac: + name: macOS Crypto3 Testing + uses: ./.github/workflows/run_tests_mac.yml + needs: + - handle-syncwith + if: | + always() && !cancelled() && + (needs.handle-syncwith.result == 'success' || needs.handle-syncwith.result == 'skipped') + secrets: inherit + with: + submodules-refs: ${{ needs.handle-syncwith.outputs.prs-refs }} diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests_linux.yml similarity index 75% rename from .github/workflows/run_tests.yml rename to .github/workflows/run_tests_linux.yml index 3eb8ddc18..652d63001 100644 --- a/.github/workflows/run_tests.yml +++ b/.github/workflows/run_tests_linux.yml @@ -1,31 +1,21 @@ -name: Run tests +name: Run linux tests on: - # Triggers the workflow on pull request events but only for the master branch - pull_request: - branches: [ master ] - push: - branches: [ master ] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: + workflow_call: + inputs: + submodules-refs: + type: string + description: "Lines with submodules' repo names and refs (e.g. `org/repo: ref`)" + required: false env: - SUITE_REPO: "NilFoundation/crypto3" LIB_NAME: "blueprint" CACHE_NAME: "blueprint-job-cache" + TESTS_ARTIFACT_NAME: "test-results-linux" jobs: - handle-syncwith: - if: github.event_name == 'pull_request' - name: Call Reusable SyncWith Handler - uses: NilFoundation/ci-cd/.github/workflows/reusable-handle-syncwith.yml@v1 - with: - ci-cd-ref: 'v1' - secrets: inherit - build-and-test: - needs: [ handle-syncwith ] + name: "Build and test Linux" runs-on: ["self-hosted", "aws_autoscaling"] strategy: fail-fast: false @@ -33,7 +23,6 @@ jobs: # https://github.com/actions/checkout/issues/1552 - name: Clean up after previous checkout run: chmod +w -R ${GITHUB_WORKSPACE}; rm -rf ${GITHUB_WORKSPACE}/*; - - name: Checkout Blueprint uses: actions/checkout@v4 with: diff --git a/.github/workflows/run_tests_mac.yml b/.github/workflows/run_tests_mac.yml new file mode 100644 index 000000000..a9dedd116 --- /dev/null +++ b/.github/workflows/run_tests_mac.yml @@ -0,0 +1,64 @@ +name: Run mac tests + +on: + workflow_call: + inputs: + submodules-refs: + type: string + description: "Lines with submodules' repo names and refs (e.g. `org/repo: ref`)" + required: false + +env: + LIB_NAME: "blueprint" + CACHE_NAME: "blueprint-job-cache" + TESTS_ARTIFACT_NAME: "test-results-mac" + +jobs: + build-and-test: + name: "Build and test macOS" + runs-on: [macos-14] + strategy: + fail-fast: false + steps: + - name: Checkout Blueprint + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + + - name: Checkout submodules to specified refs + if: inputs.submodules-refs != '' + uses: NilFoundation/ci-cd/actions/recursive-checkout@v1.2.1 + with: + refs: ${{ inputs.submodules-refs }} + paths: | + ${{ github.workspace }}/** + !${{ github.workspace }}/ + !${{ github.workspace }}/**/.git/** + - uses: DeterminateSystems/nix-installer-action@main + - uses: DeterminateSystems/magic-nix-cache-action@main + - uses: DeterminateSystems/flake-checker-action@main + # nix is taken from the cloud-init template, no need to install it. + - name: Build and run tests + run: | + nix build -L .?submodules=1#checks.aarch64-darwin.default + results_dir="./results" + mkdir -p "$results_dir" + cp -r ./result/* "$results_dir/all-checks" + rm -rf result + - name: Publish Test Results + uses: EnricoMi/publish-unit-test-result-action/linux@v2 + with: + check_name: "Mac Test Results" + files: "results/**/*.xml" + comment_mode: ${{ github.event.pull_request.head.repo.fork && 'off' || 'always' }} # Don't create PR comment from fork runs + action_fail_on_inconclusive: true # fail, if no reports + action_fail: true + - name: 'Upload Artifacts' + uses: actions/upload-artifact@v4 + with: + name: junit-test-results + path: "results/**/*.xml" + retention-days: 5 + if-no-files-found: error + overwrite: true