llvm-build-bump-pr #29
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 | |
CLANG_FORMAT_GIT: cfg | |
CLANG_FORMAT_NODE: cfn | |
jobs: | |
# Check if my package is up-to-date | |
stage1: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
- 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 dependencies | |
run: | | |
sudo apt update -y | |
sudo apt install -y ninja-build | |
pip install pyinstaller | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
- name: Debug ls | |
run: ls -al | |
# packages:clang-format-git | |
- name: Build git-clang-format | |
run: pyinstaller --onefile --strip --optimize=2 clang/tools/clang-format/git-clang-format | |
- name: Debug git-clang-format help | |
run: dist/git-clang-format --help | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CLANG_FORMAT_GIT }}-${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: dist/git-clang-format | |
# packages:clang-format-git-python | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: git-clang-format | |
path: clang/tools/clang-format/git-clang-format | |
# packages:clang-format-node | |
- 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.CLANG_FORMAT_NODE }}-${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: build/bin/clang-format | |
# Linux-qemu(cross-platform) | |
stage2-build-linux-qemu: | |
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 | |
runs-on: ubuntu-22.04 | |
needs: stage1 | |
if: ${{ needs.stage1.outputs.IS_LATEST == 'false' || inputs.force-run }} | |
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 python3-pip g++ cmake ninja-build && | |
pip install pyinstaller && | |
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 ---Debug ls--- && | |
ls -al && | |
echo ----------packages:clang-format-git---------- && | |
echo ---Build git-clang-format--- && | |
pyinstaller --onefile --strip --optimize=2 clang/tools/clang-format/git-clang-format && | |
echo ---Debug git-clang-format help--- && | |
dist/git-clang-format --help && | |
echo ----------packages:clang-format-node---------- && | |
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 git-clang-format from Docker container | |
run: docker cp ${{ matrix.docker.node-name }}:/${{ env.LLVM_REPO_SHORT }}/dist ./${{ env.CLANG_FORMAT_GIT }}-linux-${{ matrix.docker.node-name }} | |
- name: Debug copied git-clang-format folder | |
run: ls ./${{ env.CLANG_FORMAT_GIT }}-linux-${{ matrix.docker.node-name }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CLANG_FORMAT_GIT }}-linux-${{ matrix.docker.node-name }} | |
path: ./${{ env.CLANG_FORMAT_GIT }}-linux-${{ matrix.docker.node-name }}/git-clang-format | |
- name: Copy clang-format from Docker container | |
run: docker cp ${{ matrix.docker.node-name }}:/${{ env.LLVM_REPO_SHORT }}/build/bin ./${{ env.CLANG_FORMAT_NODE }}-linux-${{ matrix.docker.node-name }} | |
- name: Debug copied clang-format folder | |
run: ls ./${{ env.CLANG_FORMAT_NODE }}-linux-${{ matrix.docker.node-name }} | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CLANG_FORMAT_NODE }}-linux-${{ matrix.docker.node-name }} | |
path: ./${{ env.CLANG_FORMAT_NODE }}-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 dependencies | |
run: | | |
brew update | |
brew install ninja | |
pip install pyinstaller | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
- name: Debug ls | |
run: ls -al | |
# packages:clang-format-git | |
- name: Build git-clang-format | |
run: pyinstaller --onefile --strip --optimize=2 clang/tools/clang-format/git-clang-format | |
- name: Debug git-clang-format help | |
run: dist/git-clang-format --help | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CLANG_FORMAT_GIT }}-${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: dist/git-clang-format | |
# packages:clang-format-node | |
- 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.CLANG_FORMAT_NODE }}-${{ 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 dependencies | |
run: | | |
choco install -y ninja | |
pip install pyinstaller | |
- name: Set up checkout | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ env.LLVM_REPO }} | |
ref: ${{ needs.stage1.outputs.LLVM_LATEST_RELEASE_TAG_NAME }} | |
# packages:clang-format-git | |
- name: Build git-clang-format | |
run: pyinstaller --onefile --strip --optimize=2 clang\tools\clang-format\git-clang-format | |
- name: Debug git-clang-format help | |
run: dist\git-clang-format.exe --help | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ${{ env.CLANG_FORMAT_GIT }}-${{ env.OS_PLATFORM }}-${{ env.OS_ARCH }} | |
path: dist\git-clang-format.exe | |
# packages:clang-format-node | |
- 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.CLANG_FORMAT_NODE }}-${{ 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 for clang-format-git | |
uses: actions/download-artifact@v4 | |
with: | |
path: packages/clang-format-git/src/bin | |
pattern: cfg-* | |
- name: Download artifacts for clang-format-git-python | |
uses: actions/download-artifact@v4 | |
with: | |
path: packages/clang-format-git-python | |
name: git-clang-format | |
- name: Move git-clang-format | |
run: mv packages/clang-format-git-python/git-clang-format/git-clang-format -t packages/clang-format-git-python/src | |
- name: Download artifacts for clang-format-node | |
uses: actions/download-artifact@v4 | |
with: | |
path: packages/clang-format-node/src/bin | |
pattern: cfn-* | |
- name: Debug structure of downloaded files | |
run: | | |
ls -R packages/clang-format-git/src | |
ls -R packages/clang-format-git-python/src | |
ls -R packages/clang-format-node/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 |