# Reusable workflow to set various useful variables # and to perform checks and generate conditions for other workflows. # Currently it checks if any Rust (build-related) file is changed # and if the current (caller) workflow file is changed. # Example: # # jobs: # preflight: # uses: ./.github/workflows/reusable-preflight.yml # some-job: # needs: changes # if: ${{ needs.preflight.outputs.changes_rust }} # ....... name: Preflight on: workflow_call: # Map the workflow outputs to job outputs outputs: changes_rust: value: ${{ jobs.preflight.outputs.changes_rust }} changes_currentWorkflow: value: ${{ jobs.preflight.outputs.changes_currentWorkflow }} IMAGE: value: ${{ jobs.preflight.outputs.IMAGE }} description: "CI image" # Runners # https://github.com/pezkuwichain/ci_cd/wiki/GitHub#pezkuwichain-self-hosted-runners RUNNER: value: ${{ jobs.preflight.outputs.RUNNER }} description: | Main runner for resource-intensive tasks By default we use spot machines that can be terminated at any time. Merge queues use persistent runners to avoid kicking off from queue when the runner is terminated. RUNNER_OLDLINUX: value: ${{ jobs.preflight.outputs.RUNNER_OLDLINUX }} description: | pezkuwichain-oldlinux By default we use spot machines that can be terminated at any time. Merge queues use persistent runners to avoid kicking off from queue when the runner is terminated. # New is used only during transition to the new runners RUNNER_NEW: value: ${{ jobs.preflight.outputs.RUNNER_NEW }} description: | Main runner for resource-intensive tasks By default we use spot machines that can be terminated at any time. Merge queues use persistent runners to avoid kicking off from queue when the runner is terminated. RUNNER_OLDLINUX_NEW: value: ${{ jobs.preflight.outputs.RUNNER_OLDLINUX_NEW }} description: | pezkuwichain-oldlinux By default we use spot machines that can be terminated at any time. Merge queues use persistent runners to avoid kicking off from queue when the runner is terminated. RUNNER_DEFAULT: value: ${{ jobs.preflight.outputs.RUNNER_DEFAULT }} description: "Relatively lightweight runner. When `ubuntu-latest` is not enough" RUNNER_WEIGHTS: value: ${{ jobs.preflight.outputs.RUNNER_WEIGHTS }} RUNNER_BENCHMARK: value: ${{ jobs.preflight.outputs.RUNNER_BENCHMARK }} RUNNER_MACOS: value: ${{ jobs.preflight.outputs.RUNNER_MACOS }} # Vars SOURCE_REF_SLUG: value: ${{ jobs.preflight.outputs.SOURCE_REF_SLUG }} description: "Name of the current branch for `push` or source branch for `pull_request` with `/` replaced by `_`. Does not exists in merge_group" REF_SLUG: value: ${{ jobs.preflight.outputs.REF_SLUG }} description: | Name of the current revision (depending on the event) with `/` replaced by `_`, e.g: push - main pull_request - 49_merge merge_group - gh-readonly-queue_master_pr-49-38d43798a986430231c828b2c762997f818ac012 COMMIT_SHA: value: ${{ jobs.preflight.outputs.COMMIT_SHA }} description: "Sha of the current revision" COMMIT_SHA_SHORT: value: ${{ jobs.preflight.outputs.COMMIT_SHA_SHORT }} description: "Sha of the current revision, 8-symbols long" jobs: # # # preflight: runs-on: ubuntu-latest outputs: changes_rust: ${{ steps.set_changes.outputs.rust_any_changed || steps.set_changes.outputs.currentWorkflow_any_changed }} changes_currentWorkflow: ${{ steps.set_changes.outputs.currentWorkflow_any_changed }} IMAGE: ${{ steps.set_image.outputs.IMAGE }} # Runners # https://github.com/pezkuwichain/ci_cd/wiki/GitHub#pezkuwichain-self-hosted-runners RUNNER: ${{ steps.set_runner.outputs.RUNNER }} RUNNER_NEW: ${{ steps.set_runner.outputs.RUNNER_NEW }} RUNNER_OLDLINUX: ${{ steps.set_runner.outputs.RUNNER_OLDLINUX }} RUNNER_OLDLINUX_NEW: ${{ steps.set_runner.outputs.RUNNER_OLDLINUX_NEW }} RUNNER_DEFAULT: ${{ steps.set_runner.outputs.RUNNER_DEFAULT }} RUNNER_WEIGHTS: ${{ steps.set_runner.outputs.RUNNER_WEIGHTS }} RUNNER_BENCHMARK: ${{ steps.set_runner.outputs.RUNNER_BENCHMARK }} RUNNER_MACOS: ${{ steps.set_runner.outputs.RUNNER_MACOS }} SOURCE_REF_SLUG: ${{ steps.set_vars.outputs.SOURCE_REF_SLUG }} REF_SLUG: ${{ steps.set_vars.outputs.REF_SLUG }} COMMIT_SHA: ${{ steps.set_vars.outputs.COMMIT_SHA }} COMMIT_SHA_SHORT: ${{ steps.set_vars.outputs.COMMIT_SHA_SHORT }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 # # Set changes # - name: Current file id: current_file shell: bash run: | echo "currentWorkflowFile=$(echo ${{ github.workflow_ref }} | sed -nE "s/.*(\.github\/workflows\/[a-zA-Z0-9_-]*\.y[a]?ml)@refs.*/\1/p")" >> $GITHUB_OUTPUT echo "currentActionDir=$(echo ${{ github.action_path }} | sed -nE "s/.*(\.github\/actions\/[a-zA-Z0-9_-]*)/\1/p")" >> $GITHUB_OUTPUT - name: Set changes id: set_changes uses: tj-actions/changed-files@24d32ffd492484c1d75e0c0b894501ddb9d30d62 #v47.0.0 with: files_yaml: | rust: - '**/*' - '!.github/**/*' - '!prdoc/**/*' - '!docs/**/*' currentWorkflow: - '${{ steps.current_file.outputs.currentWorkflowFile }}' - '.github/workflows/reusable-preflight.yml' # # Set image # - name: Set image id: set_image shell: bash run: cat .github/env >> $GITHUB_OUTPUT # # Set runner # # By default we use spot machines that can be terminated at any time. # Merge queues use persistent runners to avoid kicking off from queue when the runner is terminated. # - name: Set runner id: set_runner shell: bash run: | # Use GitHub-hosted runners (ubuntu-latest) instead of Kurdistan-Tech self-hosted runners echo "RUNNER_DEFAULT=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_WEIGHTS=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_BENCHMARK=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_MACOS=macos-latest" >> $GITHUB_OUTPUT # All runners use ubuntu-latest for Pezkuwi SDK echo "RUNNER=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_OLDLINUX=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_NEW=ubuntu-latest" >> $GITHUB_OUTPUT echo "RUNNER_OLDLINUX_NEW=ubuntu-latest" >> $GITHUB_OUTPUT # # Set vars # - name: Set vars id: set_vars shell: bash run: | export SOURCE_REF_NAME=${{ github.head_ref || github.ref_name }} echo "SOURCE_REF_SLUG=${SOURCE_REF_NAME//\//_}" >> $GITHUB_OUTPUT # export COMMIT_SHA=${{ github.sha }} echo "COMMIT_SHA=$COMMIT_SHA" >> $GITHUB_OUTPUT echo "COMMIT_SHA_SHORT=${COMMIT_SHA:0:8}" >> $GITHUB_OUTPUT # export REF_NAME=${{ github.ref_name }} echo "REF_SLUG=${REF_NAME//\//_}" >> $GITHUB_OUTPUT - name: log shell: bash run: | echo "workflow file: ${{ steps.current_file.outputs.currentWorkflowFile }}" echo "Modified: ${{ steps.set_changes.outputs.modified_keys }}" # # # ci-versions: needs: [preflight] runs-on: ubuntu-latest container: image: ${{ needs.preflight.outputs.IMAGE }} steps: - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 - name: Info rust run: | rustup show cargo --version cargo +nightly --version cargo clippy --version echo "yarn version: $(yarn --version)" echo $( bizinikiwi-contracts-node --version | awk 'NF' ) estuary --version cargo-contract --version taplo --version - name: Info vars run: | echo "COMMIT_SHA: ${{ needs.preflight.outputs.COMMIT_SHA }}" echo "COMMIT_SHA_SHORT: ${{ needs.preflight.outputs.COMMIT_SHA_SHORT }}" echo "SOURCE_REF_SLUG: ${{ needs.preflight.outputs.SOURCE_REF_SLUG }}" echo "REF_SLUG: ${{ needs.preflight.outputs.REF_SLUG }}" echo "RUNNER: ${{ needs.preflight.outputs.RUNNER }}" echo "IMAGE: ${{ needs.preflight.outputs.IMAGE }}" # echo "github.ref: ${{ github.ref }}" echo "github.ref_name: ${{ github.ref_name }}" echo "github.sha: ${{ github.sha }}"