From 39aed6feea676b21ab6732b6bf120f8cee45fdd1 Mon Sep 17 00:00:00 2001 From: Pawel Szymichowski Date: Mon, 24 Oct 2022 17:36:26 +0200 Subject: [PATCH 1/4] Improve actions --- .github/actions/build-opencl-clang/action.yml | 57 +++++++++++++++++++ .github/workflows/check-in-tree-build.yml | 14 ++--- .github/workflows/on-demand-verification.yml | 32 +++++++++++ .github/workflows/on-push-verification.yml | 55 ++++++++++++++++++ .github/workflows/scheduled-verification.yml | 32 +++++++++++ 5 files changed, 181 insertions(+), 9 deletions(-) create mode 100644 .github/actions/build-opencl-clang/action.yml create mode 100644 .github/workflows/on-demand-verification.yml create mode 100644 .github/workflows/on-push-verification.yml create mode 100644 .github/workflows/scheduled-verification.yml diff --git a/.github/actions/build-opencl-clang/action.yml b/.github/actions/build-opencl-clang/action.yml new file mode 100644 index 00000000..4034734b --- /dev/null +++ b/.github/actions/build-opencl-clang/action.yml @@ -0,0 +1,57 @@ +name: Build opencl-clang +inputs: + ref_llvm: + required: true + ref_translator: + required: true + ref_opencl-clang: + required: true + +runs: + using: 'composite' + steps: + + # Setup git credentials to make applying patches possible + - run: | + git config --global user.email "action@intel.com" + git config --global user.name "Action Bot" + shell: bash + + - name: Checkout LLVM + uses: actions/checkout@v3 + with: + repository: llvm/llvm-project + path: llvm-project + ref: ${{ inputs.ref_llvm }} + + - name: Checkout SPIRV-LLVM-Translator + uses: actions/checkout@v3 + with: + repository: KhronosGroup/SPIRV-LLVM-Translator + path: llvm-project/SPIRV-LLVM-Translator + ref: ${{ inputs.ref_translator }} + + - name: Checkout opencl-clang + uses: actions/checkout@v3 + with: + path: llvm-project/opencl-clang + ref: ${{ inputs.ref_opencl-clang }} + + - name: Configure + shell: bash + run: | + mkdir build && cd build + cmake ${{ github.workspace }}/llvm-project/llvm \ + -DLLVM_ENABLE_PROJECTS="clang" \ + -DLLVM_EXTERNAL_PROJECTS="llvm-spirv;opencl-clang" \ + -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=${{ github.workspace }}/llvm-project/SPIRV-LLVM-Translator \ + -DLLVM_EXTERNAL_OPENCL_CLANG_SOURCE_DIR=${{ github.workspace }}/llvm-project/opencl-clang \ + -DCMAKE_BUILD_TYPE=Release \ + -DLLVM_TARGETS_TO_BUILD="X86" \ + -G "Unix Makefiles" + + - name: Build + shell: bash + run: | + cd build + make opencl-clang -j8 diff --git a/.github/workflows/check-in-tree-build.yml b/.github/workflows/check-in-tree-build.yml index 029e6364..73882b92 100644 --- a/.github/workflows/check-in-tree-build.yml +++ b/.github/workflows/check-in-tree-build.yml @@ -3,13 +3,13 @@ name: In-tree build on: push: branches: - - 'ocl-open-*' + - master paths-ignore: # no need to check build for: - 'docs/**' # documentation - '**.md' # README pull_request: branches: - - 'ocl-open-*' + - master paths-ignore: # no need to check build for: - 'docs/**' # documentation - '**.md' # README @@ -21,7 +21,7 @@ on: - cron: 0 0 * * 0 env: - LLVM_VERSION: 11 + LLVM_VERSION: 15 jobs: build_and_test_linux: @@ -34,21 +34,17 @@ jobs: fail-fast: false runs-on: ubuntu-18.04 steps: - - name: setup git config - run: | - git config --global user.email "<>" - git config --global user.name "GitHub Actions Bot" - name: Checkout LLVM sources uses: actions/checkout@v2 with: repository: llvm/llvm-project - ref: release/11.x + ref: main path: llvm-project - name: Checkout the translator sources uses: actions/checkout@v2 with: repository: KhronosGroup/SPIRV-LLVM-Translator - ref: llvm_release_110 + ref: main path: llvm-project/SPIRV-LLVM-Translator - name: Checkout opencl-clang sources uses: actions/checkout@v2 diff --git a/.github/workflows/on-demand-verification.yml b/.github/workflows/on-demand-verification.yml new file mode 100644 index 00000000..5adcb5a5 --- /dev/null +++ b/.github/workflows/on-demand-verification.yml @@ -0,0 +1,32 @@ +name: On demand verification +run-name: 'On demand by ${{ github.actor }}: ${{ github.ref_name }}' + +on: + workflow_dispatch: + inputs: + ref_llvm: + description: 'LLVM ref to build with' + required: true + default: 'main' + ref_translator: + description: 'SPIRV-LLVM-Translator ref to build with' + required: true + default: 'main' + ref_opencl-clang: + description: 'opencl-clang ref to build with' + required: true + default: 'master' + +jobs: + + verify_on_demand: + if: ${{ github.ref_name == 'master' }} + runs-on: ubuntu-22.04 + steps: + - name: Checkout opencl-clang sources for action files + uses: actions/checkout@v3 + - uses: ./.github/actions/build-opencl-clang + with: + ref_llvm: ${{ inputs.ref_llvm }} + ref_translator: ${{ inputs.ref_translator }} + ref_opencl-clang: ${{ inputs.ref_opencl-clang }} diff --git a/.github/workflows/on-push-verification.yml b/.github/workflows/on-push-verification.yml new file mode 100644 index 00000000..f709bf5b --- /dev/null +++ b/.github/workflows/on-push-verification.yml @@ -0,0 +1,55 @@ +name: On push verification +run-name: '${{ github.event_name }}: ${{ github.ref_name }} ${{ github.base_ref }}' + +on: + push: + branches: + - master + - ocl-open-* + pull_request: + branches: + - master + - ocl-open-* + types: [ opened, reopened, edited ] + +jobs: + + verify_default_branch: + # ref_name for 'on: push' + # base_ref for 'on: pull_request' + if: ${{ (github.event_name == 'push' && github.ref_name == 'master') || (github.event_name == 'pull_request' && github.base_ref == 'master') }} + runs-on: ubuntu-22.04 + steps: + - name: Checkout opencl-clang sources for action files + uses: actions/checkout@v3 + - uses: ./.github/actions/build-opencl-clang + with: + ref_llvm: main + ref_translator: main + ref_opencl-clang: ${{ github.ref }} + + verify_release_branch: + # ref_name for 'on: push' + # base_ref for 'on: pull_request' + if: ${{ github.ref_name != 'master' && github.base_ref != 'master' }} + runs-on: ubuntu-22.04 + steps: + + - name: Checkout opencl-clang sources for action files + uses: actions/checkout@v3 + + # This step will fail when the branch naming scheme 'ocl-open-XXX' changes! + - name: Parse LLVM version from branch name + id: check-llvm-version + run: | + BRANCH="${{ github.base_name }}" # on: pull_request, otherwise null + BRANCH=${BRANCH:-${{ github.ref_name }}} # on: push + LLVM_VERSION_LONG=$(echo $BRANCH | grep -oP '\d+') # Eg. 150 for LLVM 15 + LLVM_VERSION_SHORT=${LLVM_VERSION_LONG::-1} # Eg. 15 for LLVM 15 + echo "llvm_version=$LLVM_VERSION_SHORT" >> $GITHUB_OUTPUT + + - uses: ./.github/actions/build-opencl-clang + with: + ref_llvm: release/${{ steps.check-llvm-version.outputs.llvm_version }}.x + ref_translator: llvm_release_${{ steps.check-llvm-version.outputs.llvm_version }}0 + ref_opencl-clang: ${{ github.ref }} diff --git a/.github/workflows/scheduled-verification.yml b/.github/workflows/scheduled-verification.yml new file mode 100644 index 00000000..17d95a11 --- /dev/null +++ b/.github/workflows/scheduled-verification.yml @@ -0,0 +1,32 @@ +name: Scheduled verification +run-name: Scheduled verification + +on: + schedule: + # Run Monday & Thrusday at 00:00 + - cron: 0 0 * * 1,4 + +jobs: + + verify-default-branches: + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 # Make build-opencl-clang available + - uses: ./.github/actions/build-opencl-clang + with: + ref_llvm: main + ref_translator: main + ref_opencl-clang: master + + verify-release-branches: + strategy: + matrix: + llvm_version: [ 11, 12, 13, 14, 15 ] + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v3 # Make build-opencl-clang available + - uses: ./.github/actions/build-opencl-clang + with: + ref_llvm: release/${{ matrix.llvm_version }}.x + ref_translator: llvm_release_${{ matrix.llvm_version }}0 + ref_opencl-clang: ocl-open-${{ matrix.llvm_version }}0 From 1af1e7305f1455bff81246e0f1a89950dd617deb Mon Sep 17 00:00:00 2001 From: "Szymichowski, Pawel" Date: Mon, 24 Oct 2022 19:34:06 +0200 Subject: [PATCH 2/4] Improved Github Actions for ocl-open-110 --- .github/actions/build-opencl-clang/action.yml | 13 +++- .github/workflows/check-in-tree-build.yml | 68 ------------------- .github/workflows/on-demand-verification.yml | 29 ++++++-- .github/workflows/on-push-verification.yml | 32 ++++++--- .github/workflows/scheduled-verification.yml | 26 +++++-- 5 files changed, 77 insertions(+), 91 deletions(-) delete mode 100644 .github/workflows/check-in-tree-build.yml diff --git a/.github/actions/build-opencl-clang/action.yml b/.github/actions/build-opencl-clang/action.yml index 4034734b..43bb970e 100644 --- a/.github/actions/build-opencl-clang/action.yml +++ b/.github/actions/build-opencl-clang/action.yml @@ -1,11 +1,22 @@ +# ===--- +# Main opencl-clang building script +# ===--- + name: Build opencl-clang inputs: ref_llvm: + description: 'LLVM ref to build with' required: true ref_translator: + description: 'SPIRV-LLVM-Translator ref to build with' required: true ref_opencl-clang: + description: 'opencl-clang ref to build with' required: true + build_type: + description: 'Build type to pass to CMake' + required: false + default: Release runs: using: 'composite' @@ -46,7 +57,7 @@ runs: -DLLVM_EXTERNAL_PROJECTS="llvm-spirv;opencl-clang" \ -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=${{ github.workspace }}/llvm-project/SPIRV-LLVM-Translator \ -DLLVM_EXTERNAL_OPENCL_CLANG_SOURCE_DIR=${{ github.workspace }}/llvm-project/opencl-clang \ - -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_BUILD_TYPE=${{ inputs.build_type }} \ -DLLVM_TARGETS_TO_BUILD="X86" \ -G "Unix Makefiles" diff --git a/.github/workflows/check-in-tree-build.yml b/.github/workflows/check-in-tree-build.yml deleted file mode 100644 index 73882b92..00000000 --- a/.github/workflows/check-in-tree-build.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: In-tree build - -on: - push: - branches: - - master - paths-ignore: # no need to check build for: - - 'docs/**' # documentation - - '**.md' # README - pull_request: - branches: - - master - paths-ignore: # no need to check build for: - - 'docs/**' # documentation - - '**.md' # README - schedule: - # Weekly build on Mondays - # Ideally, we might want to simplify our regular nightly build as we - # probably don't need every configuration to be built every day: most of - # them are only necessary in pre-commits to avoid breakages - - cron: 0 0 * * 0 - -env: - LLVM_VERSION: 15 - -jobs: - build_and_test_linux: - name: Linux - strategy: - matrix: - build_type: [Release] - include: - - build_type: Release - fail-fast: false - runs-on: ubuntu-18.04 - steps: - - name: Checkout LLVM sources - uses: actions/checkout@v2 - with: - repository: llvm/llvm-project - ref: main - path: llvm-project - - name: Checkout the translator sources - uses: actions/checkout@v2 - with: - repository: KhronosGroup/SPIRV-LLVM-Translator - ref: main - path: llvm-project/SPIRV-LLVM-Translator - - name: Checkout opencl-clang sources - uses: actions/checkout@v2 - with: - path: llvm-project/opencl-clang - - name: Configure - run: | - mkdir build && cd build - cmake ${{ github.workspace }}/llvm-project/llvm \ - -DLLVM_ENABLE_PROJECTS="clang" \ - -DLLVM_EXTERNAL_PROJECTS="llvm-spirv;opencl-clang" \ - -DLLVM_EXTERNAL_LLVM_SPIRV_SOURCE_DIR=${{ github.workspace }}/llvm-project/SPIRV-LLVM-Translator \ - -DLLVM_EXTERNAL_OPENCL_CLANG_SOURCE_DIR=${{ github.workspace }}/llvm-project/opencl-clang \ - -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} \ - -DLLVM_TARGETS_TO_BUILD="X86" \ - -G "Unix Makefiles" - - name: Build - run: | - cd build - - make opencl-clang -j2 diff --git a/.github/workflows/on-demand-verification.yml b/.github/workflows/on-demand-verification.yml index 5adcb5a5..9d70e405 100644 --- a/.github/workflows/on-demand-verification.yml +++ b/.github/workflows/on-demand-verification.yml @@ -1,5 +1,9 @@ +# ===--- +# To be run manually by maintainers +# ===--- + name: On demand verification -run-name: 'On demand by ${{ github.actor }}: ${{ github.ref_name }}' +run-name: 'On demand by ${{ github.actor }}' on: workflow_dispatch: @@ -7,25 +11,36 @@ on: ref_llvm: description: 'LLVM ref to build with' required: true - default: 'main' + default: main ref_translator: description: 'SPIRV-LLVM-Translator ref to build with' required: true - default: 'main' + default: main ref_opencl-clang: description: 'opencl-clang ref to build with' required: true - default: 'master' + default: master + build_type: + description: 'Build type to pass to CMake' + required: true + default: Release + type: choice + options: + - Release + - Debug + - RelWithDebInfo jobs: verify_on_demand: - if: ${{ github.ref_name == 'master' }} runs-on: ubuntu-22.04 steps: - - name: Checkout opencl-clang sources for action files + + - name: Checkout opencl-clang sources for action files availabilty uses: actions/checkout@v3 - - uses: ./.github/actions/build-opencl-clang + + - name: Run build-opencl-clang action + uses: ./.github/actions/build-opencl-clang with: ref_llvm: ${{ inputs.ref_llvm }} ref_translator: ${{ inputs.ref_translator }} diff --git a/.github/workflows/on-push-verification.yml b/.github/workflows/on-push-verification.yml index f709bf5b..ee0e04d8 100644 --- a/.github/workflows/on-push-verification.yml +++ b/.github/workflows/on-push-verification.yml @@ -1,5 +1,11 @@ -name: On push verification -run-name: '${{ github.event_name }}: ${{ github.ref_name }} ${{ github.base_ref }}' +# ===--- +# Running on push & pull_request. +# This workflow parses the destination branch +# to choose correct dependencies revisions +# ===--- + +name: On push & pull-request verification +run-name: '${{ github.event_name }}: ${{ github.base_ref }} ${{ github.ref_name }}' # github.base_ref null for 'on: push' on: push: @@ -10,25 +16,34 @@ on: branches: - master - ocl-open-* - types: [ opened, reopened, edited ] + types: + - opened + - reopened + - synchronize # commit pushed to the PR + - ready_for_review # moved from draft state jobs: verify_default_branch: - # ref_name for 'on: push' - # base_ref for 'on: pull_request' + name: Verify for `master` branch + # ref_name for 'on: push' + # base_ref for 'on: pull_request' if: ${{ (github.event_name == 'push' && github.ref_name == 'master') || (github.event_name == 'pull_request' && github.base_ref == 'master') }} runs-on: ubuntu-22.04 steps: + - name: Checkout opencl-clang sources for action files uses: actions/checkout@v3 - - uses: ./.github/actions/build-opencl-clang + + - name: Run build-opencl-clang action + uses: ./.github/actions/build-opencl-clang with: ref_llvm: main ref_translator: main ref_opencl-clang: ${{ github.ref }} verify_release_branch: + name: Verify for `ocl-open-*` release branch # ref_name for 'on: push' # base_ref for 'on: pull_request' if: ${{ github.ref_name != 'master' && github.base_ref != 'master' }} @@ -42,13 +57,14 @@ jobs: - name: Parse LLVM version from branch name id: check-llvm-version run: | - BRANCH="${{ github.base_name }}" # on: pull_request, otherwise null + BRANCH="${{ github.base_ref }}" # on: pull_request, otherwise null BRANCH=${BRANCH:-${{ github.ref_name }}} # on: push LLVM_VERSION_LONG=$(echo $BRANCH | grep -oP '\d+') # Eg. 150 for LLVM 15 LLVM_VERSION_SHORT=${LLVM_VERSION_LONG::-1} # Eg. 15 for LLVM 15 echo "llvm_version=$LLVM_VERSION_SHORT" >> $GITHUB_OUTPUT - - uses: ./.github/actions/build-opencl-clang + - name: Run build-opencl-clang action + uses: ./.github/actions/build-opencl-clang with: ref_llvm: release/${{ steps.check-llvm-version.outputs.llvm_version }}.x ref_translator: llvm_release_${{ steps.check-llvm-version.outputs.llvm_version }}0 diff --git a/.github/workflows/scheduled-verification.yml b/.github/workflows/scheduled-verification.yml index 17d95a11..8491d18e 100644 --- a/.github/workflows/scheduled-verification.yml +++ b/.github/workflows/scheduled-verification.yml @@ -1,18 +1,26 @@ +# ===--- +# Workflow run for regular SPIRV-LLVM-Translator and LLVM compatibility check +# ===--- + name: Scheduled verification run-name: Scheduled verification on: schedule: - # Run Monday & Thrusday at 00:00 - - cron: 0 0 * * 1,4 + # Run Sunday & Wednesday at 00:00 + - cron: 0 0 * * 0,3 jobs: verify-default-branches: runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 # Make build-opencl-clang available - - uses: ./.github/actions/build-opencl-clang + + - name: Checkout opencl-clang sources for action files availabilty + uses: actions/checkout@v3 + + - name: Run build-opencl-clang action + uses: ./.github/actions/build-opencl-clang with: ref_llvm: main ref_translator: main @@ -21,11 +29,15 @@ jobs: verify-release-branches: strategy: matrix: - llvm_version: [ 11, 12, 13, 14, 15 ] + llvm_version: [ 10, 11, 12, 13, 14, 15 ] runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v3 # Make build-opencl-clang available - - uses: ./.github/actions/build-opencl-clang + + - name: Checkout opencl-clang sources for action files availabilty + uses: actions/checkout@v3 + + - name: Run build-opencl-clang action + uses: ./.github/actions/build-opencl-clang with: ref_llvm: release/${{ matrix.llvm_version }}.x ref_translator: llvm_release_${{ matrix.llvm_version }}0 From 2d6f91e075375b6b4efd4b2e317b0a83fea3ccc8 Mon Sep 17 00:00:00 2001 From: "Szymichowski, Pawel" Date: Tue, 25 Oct 2022 09:13:40 +0200 Subject: [PATCH 3/4] Remove scheduled workflow from release branches, as only default branch can run on schedule --- .github/workflows/scheduled-verification.yml | 44 -------------------- 1 file changed, 44 deletions(-) delete mode 100644 .github/workflows/scheduled-verification.yml diff --git a/.github/workflows/scheduled-verification.yml b/.github/workflows/scheduled-verification.yml deleted file mode 100644 index 8491d18e..00000000 --- a/.github/workflows/scheduled-verification.yml +++ /dev/null @@ -1,44 +0,0 @@ -# ===--- -# Workflow run for regular SPIRV-LLVM-Translator and LLVM compatibility check -# ===--- - -name: Scheduled verification -run-name: Scheduled verification - -on: - schedule: - # Run Sunday & Wednesday at 00:00 - - cron: 0 0 * * 0,3 - -jobs: - - verify-default-branches: - runs-on: ubuntu-22.04 - steps: - - - name: Checkout opencl-clang sources for action files availabilty - uses: actions/checkout@v3 - - - name: Run build-opencl-clang action - uses: ./.github/actions/build-opencl-clang - with: - ref_llvm: main - ref_translator: main - ref_opencl-clang: master - - verify-release-branches: - strategy: - matrix: - llvm_version: [ 10, 11, 12, 13, 14, 15 ] - runs-on: ubuntu-22.04 - steps: - - - name: Checkout opencl-clang sources for action files availabilty - uses: actions/checkout@v3 - - - name: Run build-opencl-clang action - uses: ./.github/actions/build-opencl-clang - with: - ref_llvm: release/${{ matrix.llvm_version }}.x - ref_translator: llvm_release_${{ matrix.llvm_version }}0 - ref_opencl-clang: ocl-open-${{ matrix.llvm_version }}0 From b589c2d8934d2dc572aff3bbf37cb2d179d8fed7 Mon Sep 17 00:00:00 2001 From: "Szymichowski, Pawel" Date: Tue, 25 Oct 2022 09:29:08 +0200 Subject: [PATCH 4/4] Likewise, on-demand workflow is only valid if it's on the default branch --- .github/workflows/on-demand-verification.yml | 47 -------------------- 1 file changed, 47 deletions(-) delete mode 100644 .github/workflows/on-demand-verification.yml diff --git a/.github/workflows/on-demand-verification.yml b/.github/workflows/on-demand-verification.yml deleted file mode 100644 index 9d70e405..00000000 --- a/.github/workflows/on-demand-verification.yml +++ /dev/null @@ -1,47 +0,0 @@ -# ===--- -# To be run manually by maintainers -# ===--- - -name: On demand verification -run-name: 'On demand by ${{ github.actor }}' - -on: - workflow_dispatch: - inputs: - ref_llvm: - description: 'LLVM ref to build with' - required: true - default: main - ref_translator: - description: 'SPIRV-LLVM-Translator ref to build with' - required: true - default: main - ref_opencl-clang: - description: 'opencl-clang ref to build with' - required: true - default: master - build_type: - description: 'Build type to pass to CMake' - required: true - default: Release - type: choice - options: - - Release - - Debug - - RelWithDebInfo - -jobs: - - verify_on_demand: - runs-on: ubuntu-22.04 - steps: - - - name: Checkout opencl-clang sources for action files availabilty - uses: actions/checkout@v3 - - - name: Run build-opencl-clang action - uses: ./.github/actions/build-opencl-clang - with: - ref_llvm: ${{ inputs.ref_llvm }} - ref_translator: ${{ inputs.ref_translator }} - ref_opencl-clang: ${{ inputs.ref_opencl-clang }}