From 84b226d4ab4b20ee4db164c7e06738a5b06f9aec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=AD=9F=E5=AE=81?= Date: Sun, 29 Dec 2024 17:03:03 +0800 Subject: [PATCH] add ninja workflows --- .github/workflows/linux.yml | 228 ++++++++++++++++++++++++++++++++++ .github/workflows/macos.yml | 53 ++++++++ .github/workflows/windows.yml | 67 ++++++++++ 3 files changed, 348 insertions(+) create mode 100644 .github/workflows/linux.yml create mode 100644 .github/workflows/macos.yml create mode 100644 .github/workflows/windows.yml diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml new file mode 100644 index 0000000..07431bf --- /dev/null +++ b/.github/workflows/linux.yml @@ -0,0 +1,228 @@ +name: Linux + +on: + pull_request: + push: + release: + types: published + +jobs: + fedora: + runs-on: [ubuntu-latest] + container: + image: fedora:40 + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: dnf install -y ninja-build cmake gtest-devel re2c clang util-linux clang-tools-extra + - name: Linting + run: misc/ci.py + - name: Configure with CMake + run: cmake -Bbuild -G"Ninja Multi-Config" -DNINJA_CLANG_TIDY=1 + - name: Build debug ninja + run: CLICOLOR_FORCE=1 ninja + working-directory: build + - name: Test debug ninja + working-directory: build/Debug + run: | + ./ninja_test --gtest_color=yes + ../../misc/output_test.py + - name: Build release ninja + run: CLICOLOR_FORCE=1 ninja -f build-Release.ninja + working-directory: build + - name: Test release ninja + working-directory: build/Release + run: | + ./ninja_test --gtest_color=yes + ../../misc/output_test.py + + build: + runs-on: [ubuntu-latest] + container: + image: rockylinux:8 + steps: + - uses: actions/checkout@v4 + - uses: codespell-project/actions-codespell@master + with: + ignore_words_list: fo,wee,addin,notin + - name: Install dependencies + run: | + dnf install -y make gcc-c++ libasan clang-analyzer cmake dnf-plugins-core epel-release + dnf config-manager --set-enabled powertools + dnf install -y gtest-devel p7zip p7zip-plugins + + - name: Build debug ninja + shell: bash + env: + CFLAGS: -fstack-protector-all -fsanitize=address + CXXFLAGS: -fstack-protector-all -fsanitize=address + run: | + scan-build -o scanlogs cmake -DCMAKE_BUILD_TYPE=Debug -B debug-build + scan-build -o scanlogs cmake --build debug-build --parallel --config Debug + + - name: Test debug ninja + run: ASAN_OPTIONS=detect_leaks=0 ./ninja_test + working-directory: debug-build + + - name: Build release ninja + shell: bash + run: | + cmake -DCMAKE_BUILD_TYPE=Release -B release-build + cmake --build release-build --parallel --config Release + strip release-build/ninja + + - name: Test release ninja + run: ./ninja_test + working-directory: release-build + + - name: Create ninja archive + run: | + mkdir artifact + 7z a artifact/ninja-linux.zip ./release-build/ninja + + # Upload ninja binary archive as an artifact + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ninja-binary-archives + path: artifact + + - name: Upload release asset + if: github.event.action == 'published' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ./artifact/ninja-linux.zip + asset_name: ninja-linux.zip + asset_content_type: application/zip + + test: + runs-on: [ubuntu-latest] + container: + image: ubuntu:20.04 + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + apt update + apt install -y python3-pytest ninja-build python3-pip clang libgtest-dev + pip3 install cmake==3.17.* + - name: Configure (GCC) + run: cmake -Bbuild-gcc -DCMAKE_BUILD_TYPE=Debug -G'Ninja Multi-Config' + + - name: Build (GCC, Debug) + run: cmake --build build-gcc --config Debug + - name: Unit tests (GCC, Debug) + run: ./build-gcc/Debug/ninja_test + - name: Python tests (GCC, Debug) + run: pytest-3 --color=yes ../.. + working-directory: build-gcc/Debug + + - name: Build (GCC, Release) + run: cmake --build build-gcc --config Release + - name: Unit tests (GCC, Release) + run: ./build-gcc/Release/ninja_test + - name: Python tests (GCC, Release) + run: pytest-3 --color=yes ../.. + working-directory: build-gcc/Release + + - name: Configure (Clang) + run: CC=clang CXX=clang++ cmake -Bbuild-clang -DCMAKE_BUILD_TYPE=Debug -G'Ninja Multi-Config' + + - name: Build (Clang, Debug) + run: cmake --build build-clang --config Debug + - name: Unit tests (Clang, Debug) + run: ./build-clang/Debug/ninja_test + - name: Python tests (Clang, Debug) + run: pytest-3 --color=yes ../.. + working-directory: build-clang/Debug + + - name: Build (Clang, Release) + run: cmake --build build-clang --config Release + - name: Unit tests (Clang, Release) + run: ./build-clang/Release/ninja_test + - name: Python tests (Clang, Release) + run: pytest-3 --color=yes ../.. + working-directory: build-clang/Release + + build-with-python: + runs-on: [ubuntu-latest] + container: + image: ${{ matrix.image }} + strategy: + matrix: + image: ['ubuntu:20.04', 'ubuntu:22.04', 'ubuntu:24.04'] + steps: + - uses: actions/checkout@v4 + - name: Install dependencies + run: | + apt update + apt install -y g++ python3 + - name: ${{ matrix.image }} + run: | + python3 configure.py --bootstrap + ./ninja all + python3 misc/ninja_syntax_test.py + ./misc/output_test.py + + build-aarch64: + name: Build Linux ARM64 + runs-on: [ubuntu-latest] + steps: + - uses: actions/checkout@v4 + + - name: Build + uses: uraimo/run-on-arch-action@v2 + with: + arch: aarch64 + distro: ubuntu18.04 + githubToken: ${{ github.token }} + dockerRunArgs: | + --volume "${PWD}:/ninja" + install: | + apt-get update -q -y + apt-get install -q -y make gcc g++ libasan5 clang-tools curl p7zip-full file + run: | + set -x + cd /ninja + + # INSTALL CMAKE + CMAKE_VERSION=3.23.4 + curl -L -O https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}-Linux-aarch64.sh + chmod +x cmake-${CMAKE_VERSION}-Linux-aarch64.sh + ./cmake-${CMAKE_VERSION}-Linux-aarch64.sh --skip-license --prefix=/usr/local + + # BUILD + cmake -DCMAKE_BUILD_TYPE=Release -B release-build + cmake --build release-build --parallel --config Release + strip release-build/ninja + file release-build/ninja + + # TEST + pushd release-build + ./ninja_test + popd + + # CREATE ARCHIVE + mkdir artifact + 7z a artifact/ninja-linux-aarch64.zip ./release-build/ninja + + # Upload ninja binary archive as an artifact + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ninja-aarch64-binary-archives + path: artifact + + - name: Upload release asset + if: github.event.action == 'published' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ./artifact/ninja-linux-aarch64.zip + asset_name: ninja-linux-aarch64.zip + asset_content_type: application/zip diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml new file mode 100644 index 0000000..33acd89 --- /dev/null +++ b/.github/workflows/macos.yml @@ -0,0 +1,53 @@ +name: macOS + +on: + pull_request: + push: + release: + types: published + +jobs: + build: + runs-on: macos-13 + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: brew install re2c p7zip cmake + + - name: Build ninja + shell: bash + env: + MACOSX_DEPLOYMENT_TARGET: 10.15 + run: | + cmake -Bbuild -GXcode '-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64' + cmake --build build --config Release + + - name: Test ninja (Release) + run: ./ninja_test + working-directory: build/Release + + - name: Create ninja archive + shell: bash + run: | + mkdir artifact + 7z a artifact/ninja-mac.zip ./build/Release/ninja + + # Upload ninja binary archive as an artifact + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ninja-binary-archives + path: artifact + + - name: Upload release asset + if: github.event.action == 'published' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ./artifact/ninja-mac.zip + asset_name: ninja-mac.zip + asset_content_type: application/zip diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml new file mode 100644 index 0000000..c20889d --- /dev/null +++ b/.github/workflows/windows.yml @@ -0,0 +1,67 @@ +name: Windows + +on: + pull_request: + push: + release: + types: published + +jobs: + build: + runs-on: windows-latest + + strategy: + fail-fast: false + matrix: + include: + - arch: 'x64' + suffix: '' + - arch: 'arm64' + suffix: 'arm64' + + steps: + - uses: actions/checkout@v4 + + - name: Install dependencies + run: choco install re2c + + - name: Build ninja + shell: bash + run: | + cmake -Bbuild -A ${{ matrix.arch }} + cmake --build build --parallel --config Debug + cmake --build build --parallel --config Release + + - name: Test ninja (Debug) + if: matrix.arch != 'arm64' + run: .\ninja_test.exe + working-directory: build/Debug + + - name: Test ninja (Release) + if: matrix.arch != 'arm64' + run: .\ninja_test.exe + working-directory: build/Release + + - name: Create ninja archive + shell: bash + run: | + mkdir artifact + 7z a artifact/ninja-win${{ matrix.suffix }}.zip ./build/Release/ninja.exe + + # Upload ninja binary archive as an artifact + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ninja-binary-archives${{ matrix.suffix }} + path: artifact + + - name: Upload release asset + if: github.event.action == 'published' + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ github.event.release.upload_url }} + asset_path: ./artifact/ninja-win${{ matrix.suffix }}.zip + asset_name: ninja-win${{ matrix.suffix }}.zip + asset_content_type: application/zip