llvm-build-bump-pr #27
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: llvm-build-bump-pr | |
on: | |
workflow_dispatch: | |
inputs: | |
force-run: | |
description: Force run | |
required: false | |
default: false | |
type: boolean | |
schedule: | |
- cron: '0 1 * * 1' | |
env: | |
GH_TOKEN: ${{ secrets.GH_PAT }} | |
LLVM_REPO: llvm/llvm-project | |
LLVM_REPO_SHORT: llvm-project | |
jobs: | |
# Check if my package is up-to-date | |
stage1: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
- name: Set up dependencies | |
run: sudo apt-get install -y jq | |
- name: Fetch LLVM current release tag name from local | |
run: | | |
LLVM_CURRENT_RELEASE_TAG_NAME=$(cat .clang-format-version) | |
echo "LLVM_CURRENT_RELEASE_TAG_NAME=$LLVM_CURRENT_RELEASE_TAG_NAME" >> $GITHUB_ENV | |
echo "LLVM_CURRENT_RELEASE_TAG_NAME: $LLVM_CURRENT_RELEASE_TAG_NAME" | |
- name: Fetch LLVM latest release tag name from ${{ env.LLVM_REPO }} | |
run: | | |
LLVM_LATEST_RELEASE=$(gh api \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/${{ env.LLVM_REPO }}/releases/latest) | |
LLVM_LATEST_RELEASE_TAG_NAME=$(echo "$LLVM_LATEST_RELEASE" | jq -r .tag_name) | |
echo "LLVM_LATEST_RELEASE_TAG_NAME=$LLVM_LATEST_RELEASE_TAG_NAME" >> $GITHUB_ENV | |
echo "LLVM_LATEST_RELEASE_TAG_NAME: $LLVM_LATEST_RELEASE_TAG_NAME" | |
- name: Debug outputs | |
run: | | |
echo "LLVM_CURRENT_RELEASE_TAG_NAME: ${{ env.LLVM_CURRENT_RELEASE_TAG_NAME }}" | |
echo "LLVM_LATEST_RELEASE_TAG_NAME: ${{ env.LLVM_LATEST_RELEASE_TAG_NAME }}" | |
echo "IS_LATEST: ${{ env.LLVM_CURRENT_RELEASE_TAG_NAME == env.LLVM_LATEST_RELEASE_TAG_NAME }}" | |
outputs: | |
LLVM_CURRENT_RELEASE_TAG_NAME: ${{ env.LLVM_CURRENT_RELEASE_TAG_NAME }} | |
LLVM_LATEST_RELEASE_TAG_NAME: ${{ env.LLVM_LATEST_RELEASE_TAG_NAME }} | |
IS_LATEST: ${{ env.LLVM_CURRENT_RELEASE_TAG_NAME == env.LLVM_LATEST_RELEASE_TAG_NAME }} | |
# Linux-x64 | |
stage2-build-linux-x64: | |
runs-on: ubuntu-22.04 | |
needs: stage1 | |
if: ${{ needs.stage1.outputs.IS_LATEST == 'false' || inputs.force-run }} | |
steps: | |
- name: Set up node | |
uses: actions/setup-node@v4 | |
- name: Set up os platform and os arch environment variables | |
run: | | |
OS_PLATFORM=$(node -p "require('os').platform()") | |
echo "OS_PLATFORM=$OS_PLATFORM" >> $GITHUB_ENV | |
echo "OS_PLATFORM: $OS_PLATFORM" | |
OS_ARCH=$(node -p "require('os').arch()") | |
echo "OS_ARCH=$OS_ARCH" >> $GITHUB_ENV | |
echo "OS_ARCH: $OS_ARCH" | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
- name: Set up dependencies | |
run: | | |
sudo apt update -y | |
sudo apt install -y python3 g++ cmake ninja-build | |
- name: Build cmake | |
run: | | |
cmake -S llvm -B build -G Ninja \ | |
-DLLVM_ENABLE_PROJECTS="clang" \ | |
-DCMAKE_BUILD_TYPE=MinSizeRel | |
- name: Build clang-format | |
run: ninja -C build clang-format | |
- name: Debug clang-format version | |
run: build/bin/clang-format --version | |
- name: Download artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: build/bin/clang-format | |
# Linux-qemu(cross-platform) | |
stage2-build-linux-qemu: | |
runs-on: ubuntu-22.04 | |
needs: stage1 | |
if: ${{ needs.stage1.outputs.IS_LATEST == 'false' || inputs.force-run }} | |
strategy: | |
matrix: | |
docker: | |
- platform: arm/v7 | |
ubuntu-image: arm32v7 | |
node-name: arm | |
- platform: arm64/v8 | |
ubuntu-image: arm64v8 | |
node-name: arm64 | |
- platform: ppc64le | |
ubuntu-image: ppc64le | |
node-name: ppc64 | |
- platform: s390x | |
ubuntu-image: s390x | |
node-name: s390x | |
steps: | |
- name: Debug matrix | |
run: echo ${{ matrix.docker.platform }} ${{ matrix.docker.ubuntu-image }} ${{ matrix.docker.node-name }} | |
- name: Set up QEMU | |
run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes | |
# Use the oldest ubuntu image version possible for backward compatibility. | |
- name: Docker run | |
run: | | |
docker run --name ${{ matrix.docker.node-name }} --platform linux/${{ matrix.docker.platform }} ${{ matrix.docker.ubuntu-image }}/ubuntu:22.04 /bin/bash -c " | |
echo ---Set up environment variables--- && | |
export DEBIAN_FRONTEND=noninteractive && | |
echo ---Debug uname -m--- && | |
uname -m && | |
echo ---Debug pwd--- && | |
pwd && | |
echo ---Set up dependencies--- && | |
apt update -y && | |
apt install -y git python3 g++ cmake ninja-build && | |
echo ---Set up checkout--- && | |
git clone --depth 1 --branch ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} https://github.com/${{ env.LLVM_REPO }}.git && | |
cd ${{ env.LLVM_REPO_SHORT }} && | |
echo ---Build cmake--- && | |
cmake -S llvm -B build -G Ninja \ | |
-DLLVM_ENABLE_PROJECTS="clang" \ | |
-DCMAKE_BUILD_TYPE=MinSizeRel && | |
echo ---Build clang-format--- && | |
ninja -C build clang-format && | |
echo ---Debug clang-format version--- && | |
build/bin/clang-format --version && | |
echo ---Debug uname -m--- && | |
uname -m | |
" | |
- name: Copy file from Docker container | |
run: docker cp ${{ matrix.docker.node-name }}:/${{ env.LLVM_REPO_SHORT }}/build/bin ./linux-${{ matrix.docker.node-name }} | |
- name: Debug copied build folder | |
run: ls ./linux-${{ matrix.docker.node-name }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: linux-${{ matrix.docker.node-name }} | |
path: ./linux-${{ matrix.docker.node-name }}/clang-format | |
# MacOS | |
stage2-build-darwin: | |
strategy: | |
matrix: | |
type: | |
- macos-14 # arm64 (macos-latest: arm64) | |
- macos-12 # x64 (macos-13: x64) | |
# Use the oldest version possible for backward compatibility. | |
runs-on: ${{ matrix.type }} | |
needs: stage1 | |
if: ${{ needs.stage1.outputs.IS_LATEST == 'false' || inputs.force-run }} | |
steps: | |
- name: Set up node | |
uses: actions/setup-node@v4 | |
- name: Set up os platform and os arch environment variables | |
run: | | |
OS_PLATFORM=$(node -p "require('os').platform()") | |
echo "OS_PLATFORM=$OS_PLATFORM" >> $GITHUB_ENV | |
echo "OS_PLATFORM: $OS_PLATFORM" | |
OS_ARCH=$(node -p "require('os').arch()") | |
echo "OS_ARCH=$OS_ARCH" >> $GITHUB_ENV | |
echo "OS_ARCH: $OS_ARCH" | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
- name: Set up dependencies | |
run: | | |
brew update | |
brew install ninja | |
- name: Build cmake | |
run: | | |
cmake -S llvm -B build -G Ninja \ | |
-DLLVM_ENABLE_PROJECTS="clang" \ | |
-DCMAKE_BUILD_TYPE=MinSizeRel | |
- name: Build clang-format | |
run: ninja -C build clang-format | |
- name: Debug clang-format version | |
run: build/bin/clang-format --version | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: build/bin/clang-format | |
# Windows | |
stage2-build-win32: | |
# Use the oldest version possible for backward compatibility. | |
runs-on: windows-2022 | |
needs: stage1 | |
if: ${{ needs.stage1.outputs.IS_LATEST == 'false' || inputs.force-run }} | |
steps: | |
- name: Set up node | |
uses: actions/setup-node@v4 | |
- name: Set up os platform and os arch environment variables | |
run: | | |
$OS_PLATFORM = node -p "require('os').platform()" | |
echo "OS_PLATFORM=$OS_PLATFORM" >> $env:GITHUB_ENV | |
echo "OS_PLATFORM: $OS_PLATFORM" | |
$OS_ARCH = node -p "require('os').arch()" | |
echo "OS_ARCH=$OS_ARCH" >> $env:GITHUB_ENV | |
echo "OS_ARCH: $OS_ARCH" | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
- name: Set up dependencies | |
run: choco install -y ninja | |
- name: Build cmake | |
run: cmake -S llvm -B build -G Ninja -DLLVM_ENABLE_PROJECTS="clang" -DCMAKE_BUILD_TYPE=MinSizeRel | |
- name: Build clang-format | |
run: ninja -C build clang-format | |
- name: Debug clang-format version | |
run: build\bin\clang-format --version | |
- name: Upload a artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: build\bin\clang-format.exe | |
# Create PR using build artifacts and bump version | |
stage3: | |
runs-on: ubuntu-latest | |
needs: | |
- stage1 | |
- stage2-build-linux-x64 | |
- stage2-build-linux-qemu | |
- stage2-build-darwin | |
- stage2-build-win32 | |
steps: | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: src/bin | |
- name: Debug structure of downloaded files | |
run: ls -R src/bin | |
- name: Bump version | |
run: echo ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} > .clang-format-version | |
- name: Create Pull Request | |
uses: peter-evans/create-pull-request@v7 | |
with: | |
token: ${{ secrets.GH_PAT }} | |
commit-message: 'build(deps): bump LLVM from ${{ needs.stage1.outputs.LLVM_CURRENT_RELEASE_TAG_NAME }} to ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }}' | |
branch: 'bump-llvm-from-${{ needs.stage1.outputs.LLVM_CURRENT_RELEASE_TAG_NAME }}-to-${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }}' | |
base: 'main' | |
title: 'build(deps): bump LLVM from ${{ needs.stage1.outputs.LLVM_CURRENT_RELEASE_TAG_NAME }} to ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }}' | |
body: | | |
This PR bumps the LLVM version from `${{ needs.stage1.outputs.LLVM_CURRENT_RELEASE_TAG_NAME }}` to `${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }}` using LLVM binary that was built automatically. :tada: | |
See [Actions](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for more details. | |
labels: dependencies |