TTTN #488
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: "CI :: Build" | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
branches: ["**"] | |
types: [opened, reopened, ready_for_review, synchronize] | |
concurrency: | |
group: ${{ github.event.pull_request && format('ci-build-full-pr-{0}', github.event.pull_request.number) || format('ci-build-full-push-main-{0}', github.sha) }} | |
cancel-in-progress: true | |
env: | |
TMPDIR: "/tmp" | |
jobs: | |
run: | |
if: github.event.pull_request.draft == false | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, macos-13, windows-latest] | |
partition: [0, 1, 2] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: "Support longpaths" | |
if: runner.os == 'Windows' | |
run: git config --system core.longpaths true | |
- name: "Checkout @ GitHub default" | |
uses: actions/checkout@v3 | |
- name: "Checkout @ Simulated squashed-merge if PR" | |
id: checkout_pr | |
uses: ./.github/actions/checkout-pr | |
with: | |
ref: ${{ github.base_ref }} | |
- name: "Setup pnpm" | |
uses: pnpm/action-setup@v2 | |
with: | |
version: 8.7.0 | |
- name: "Setup Node" | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 18.14.0 | |
- name: "Setup CI patterns" | |
id: ci_patterns | |
uses: ./.github/actions/setup-ci-patterns | |
- name: "Setup build mode {none,full,partial}" | |
id: setup_build_mode | |
shell: bash | |
run: | | |
npm -g install [email protected] | |
bun ./.github/supporting-files/ci/build-partitioning/build_partitioning.ts \ | |
--outputPath='/tmp/partitions.json' \ | |
--forceFull='${{ !github.event.pull_request }}' \ | |
--baseSha='${{ steps.checkout_pr.outputs.base_sha }}' \ | |
--headSha='${{steps.checkout_pr.outputs.head_sha }}' \ | |
--graphJsonPath='./repo/graph.json' \ | |
--partition='./.github/supporting-files/ci/partitions/partition0.txt' \ | |
--partition='./.github/supporting-files/ci/partitions/partition1.txt' | |
npm -g uninstall bun | |
echo "mode=$(jq --raw-output '.[${{ matrix.partition }}].mode' /tmp/partitions.json)" >> $GITHUB_OUTPUT | |
echo "bootstrapPnpmFilterString=$(jq --raw-output '.[${{ matrix.partition }}].bootstrapPnpmFilterString' /tmp/partitions.json)" >> $GITHUB_OUTPUT | |
echo "fullBuildPnpmFilterString=$(jq --raw-output '.[${{ matrix.partition }}].fullBuildPnpmFilterString' /tmp/partitions.json)" >> $GITHUB_OUTPUT | |
echo "upstreamPnpmFilterString=$(jq --raw-output '.[${{ matrix.partition }}].upstreamPnpmFilterString' /tmp/partitions.json)" >> $GITHUB_OUTPUT | |
echo "affectedPnpmFilterString=$(jq --raw-output '.[${{ matrix.partition }}].affectedPnpmFilterString' /tmp/partitions.json)" >> $GITHUB_OUTPUT | |
echo "Done." | |
- name: "Setup environment" | |
if: steps.setup_build_mode.outputs.mode != 'none' | |
uses: ./.github/actions/setup-env | |
- name: "Bootstrap" | |
if: steps.setup_build_mode.outputs.mode != 'none' | |
env: | |
PLAYWRIGHT_BASE__installDeps: "true" | |
uses: ./.github/actions/bootstrap | |
with: | |
pnpm_filter_string: ${{ steps.setup_build_mode.outputs.bootstrapPnpmFilterString }} | |
- name: "FULL → Build" | |
if: steps.setup_build_mode.outputs.mode == 'full' | |
shell: bash | |
env: | |
WEBPACK__minimize: "false" | |
WEBPACK__tsLoaderTranspileOnly: "false" | |
KIE_TOOLS_BUILD__runLinters: "true" | |
KIE_TOOLS_BUILD__runTests: "true" | |
KIE_TOOLS_BUILD__runEndToEndTests: ${{ runner.os == 'Linux' }} | |
KIE_TOOLS_BUILD__buildContainerImages: ${{ runner.os != 'Windows' }} | |
KIE_TOOLS_BUILD__buildExamples: "true" | |
KIE_TOOLS_BUILD__ignoreTestFailures: ${{ !github.event.pull_request }} | |
KIE_TOOLS_BUILD__ignoreEndToEndTestFailures: ${{ !github.event.pull_request }} | |
DISPLAY: ":99.0" | |
START_SERVER_AND_TEST_INSECURE: "true" | |
NODE_OPTIONS: "--max_old_space_size=4096" | |
run: >- | |
eval "pnpm ${{ steps.setup_build_mode.outputs.fullBuildPnpmFilterString }} --workspace-concurrency=1 build:prod" | |
- name: "PARTIAL → Build upstream" | |
if: steps.setup_build_mode.outputs.mode == 'partial' | |
shell: bash | |
env: | |
KIE_TOOLS_BUILD__buildContainerImages: ${{ runner.os != 'Windows' }} | |
KIE_TOOLS_BUILD__buildExamples: "true" | |
run: | | |
eval "pnpm ${{ steps.setup_build_mode.outputs.upstreamPnpmFilterString }} build:dev" | |
- name: "PARTIAL → Build changed and downstream" | |
shell: bash | |
if: steps.setup_build_mode.outputs.mode == 'partial' | |
env: | |
WEBPACK__minimize: "false" | |
KIE_TOOLS_BUILD__runLinters: "true" | |
KIE_TOOLS_BUILD__runTests: "true" | |
KIE_TOOLS_BUILD__runEndToEndTests: ${{ runner.os == 'Linux' }} | |
KIE_TOOLS_BUILD__buildContainerImages: ${{ runner.os != 'Windows' }} | |
KIE_TOOLS_BUILD__buildExamples: "true" | |
DISPLAY: ":99.0" | |
START_SERVER_AND_TEST_INSECURE: "true" | |
NODE_OPTIONS: "--max_old_space_size=4096" | |
run: | | |
eval "pnpm ${{ steps.setup_build_mode.outputs.affectedPnpmFilterString }} --workspace-concurrency=1 build:prod" | |
- name: "Check tests result (`main` only)" | |
if: always() && !cancelled() && steps.setup_build_mode.outputs.mode != 'none' | |
uses: actions/github-script@v6 | |
env: | |
KIE_TOOLS_CI__JUNIT_REPORT_RESULTS_PATTERNS: |- | |
${{ steps.ci_patterns.outputs.tests_reports_patterns }} | |
${{ steps.ci_patterns.outputs.end_to_end_tests_reports_patterns }} | |
with: | |
result-encoding: string | |
script: | | |
const patterns = process.env["KIE_TOOLS_CI__JUNIT_REPORT_RESULTS_PATTERNS"] | |
.split("\n") | |
.map(p => p.trim()) | |
.filter(p => p); | |
const script = require("./scripts/check-junit-report-results/src/index.js"); | |
await script({ core, glob, patterns }); | |
- name: "Check hanging uncommitted files (you should commit those!)" | |
if: always() && !cancelled() && steps.setup_build_mode.outputs.mode != 'none' | |
shell: bash | |
run: | | |
git diff | |
[ "0" == "$(git diff | wc -l | tr -d ' ')" ] | |
- name: "Upload reports and artifacts" | |
if: always() && !cancelled() && steps.setup_build_mode.outputs.mode != 'none' | |
uses: ./.github/actions/upload-ci-reports-and-artifacts | |
- name: "Upload end-to-end tests results to Buildkite (`main` only)" | |
if: always() && !cancelled() && steps.setup_build_mode.outputs.mode != 'none' && !github.event.pull_request | |
shell: bash | |
env: | |
BUILDKITE_ANALYTICS_TOKEN: ${{ secrets.BUILDKITE_TOKEN }} | |
BUILDKITE_BRANCH: ${{ github.ref_name }} | |
BUILDKITE_MESSAGE: ${{ github.event.commits[0].message }} | |
run: | | |
eval "find -P * -type f ${{ steps.ci_patterns.outputs.end_to_end_tests_reports_patterns_for_find }}" | |
echo "---------------------------- starting upload -----------------------" | |
eval "find -P * -type f ${{ steps.ci_patterns.outputs.end_to_end_tests_reports_patterns_for_find }}" | xargs -I{} curl -X POST \ | |
-H "Authorization: Token token=\"$BUILDKITE_ANALYTICS_TOKEN\"" \ | |
-F "format=junit" \ | |
-F "data=@{}" \ | |
-F "run_env[CI]=github_actions" \ | |
-F "run_env[key]=$GITHUB_ACTION-$GITHUB_RUN_NUMBER-$GITHUB_RUN_ATTEMPT" \ | |
-F "run_env[number]=$GITHUB_RUN_NUMBER" \ | |
-F "run_env[branch]=$BUILDKITE_BRANCH" \ | |
-F "run_env[commit_sha]=$GITHUB_SHA" \ | |
-F "run_env[message]=$BUILDKITE_MESSAGE" \ | |
-F "run_env[url]=https://github.com/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \ | |
https://analytics-api.buildkite.com/v1/uploads | |
- name: "Print storage usage (after build)" | |
if: always() && !cancelled() | |
shell: bash | |
run: | | |
df -h . |