From 74e1d1ea02283f3f72ee6613e2433ceb9a8d4597 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sun, 20 Dec 2020 15:18:46 +0900 Subject: Reorganize GitHub Actions configuration [skip travis][skip appveyor] * Skip if commit message contains `ci skip`, `skip ci`, or `skip gha` ENCLOSED WITH BRACKETS (excluding lint job). * Separate build and test. This is because builds can be run in parallel, but running tests in parallel can cause logs to get mixed up or not finished. * Don't use Chocolatey because it seems to take 1-2 minutes to start up. * Use the cache better. * Use `actions/checkout@v2` instead of `actions/checkout@v1`. * Remove unnecessary package installation. * Remove unnecessary flag settings. * Remove `-j` for rake because it doesn't seem to have any effect. * Rename `main.yml` to `oss-fuzz.yml` to clarify. --- .github/workflows/build.yml | 150 ++++++++++++++++++++++------------ .github/workflows/codeql-analysis.yml | 4 + .github/workflows/main.yml | 23 ------ .github/workflows/oss-fuzz.yml | 27 ++++++ 4 files changed, 129 insertions(+), 75 deletions(-) delete mode 100644 .github/workflows/main.yml create mode 100644 .github/workflows/oss-fuzz.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 2a3b8d18c..404fd8fe3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,105 +3,151 @@ name: Build & Test on: [push, pull_request] jobs: + Check-Skip: + if: | + !contains(github.event.head_commit.message, '[ci skip]') && + !contains(github.event.head_commit.message, '[skip ci]') && + !contains(github.event.head_commit.message, '[skip gha]') + runs-on: ubuntu-latest + steps: + - run: echo skip + Ubuntu-1604: + needs: Check-Skip runs-on: ubuntu-16.04 env: MRUBY_CONFIG: ci/gcc-clang + CC: gcc steps: - - uses: actions/checkout@v1 - - name: apt - run: sudo apt install ruby gperf - - name: build and test - run: rake -m -j4 gensym all test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + run: rake -m && rake test Ubuntu-1804-gcc: + needs: Check-Skip runs-on: ubuntu-18.04 env: MRUBY_CONFIG: ci/gcc-clang CC: gcc - CXX: g++ steps: - - uses: actions/checkout@v1 - - name: apt - run: sudo apt install ruby gperf gcc g++ - - name: build and test - run: rake -m -j4 gensym all test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + run: rake -m && rake test Ubuntu-1804-clang: + needs: Check-Skip runs-on: ubuntu-18.04 env: MRUBY_CONFIG: ci/gcc-clang CC: clang - CXX: clang++ steps: - - uses: actions/checkout@v1 - - name: apt - run: sudo apt install ruby gperf - - name: build and test - run: rake -m -j4 gensym all test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + run: rake -m && rake test macOS: + needs: Check-Skip runs-on: macos-latest env: MRUBY_CONFIG: ci/gcc-clang + CC: clang steps: - - uses: actions/checkout@v1 - - name: brew - run: brew install ruby gperf - - name: build and test - run: rake -m -j4 gensym all test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + run: rake -m && rake test Windows-MinGW: + needs: Check-Skip runs-on: windows-latest env: MRUBY_CONFIG: ci/gcc-clang - CFLAGS: -g -O1 -Wall -Wundef + CC: gcc steps: - - uses: actions/checkout@v1 - - name: chocolatey - run: choco install -y ruby gperf - - name: build - run: rake -E 'STDOUT.sync=true' -j4 gensym all test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + # If build and test are separated like `rake && rake test`, somehow + # it will be fully built even at `rake test`, so it is not separated. + run: rake -E STDOUT.sync=true test Windows-Cygwin: + needs: Check-Skip runs-on: windows-latest env: - MRUBY_CONFIG: ci/gcc-clang ACTIONS_ALLOW_UNSECURE_COMMANDS: true + MRUBY_CONFIG: ci/gcc-clang + CC: gcc + installer-path: '%TMP%\cygwin-setup.exe' + cygwin-root: C:\cygwin + package-dir: C:\cygwin-package + cache-version: v1 steps: - - uses: actions/checkout@v1 - - uses: actions/cache@v1 + - uses: actions/checkout@v2 + - uses: actions/cache@v2 with: - path: C:\Users\runneradmin\AppData\Local\Temp\chocolatey - key: ${{ runner.os }}-cygwin-chocolatey-${{ matrix.os }}-${{ github.sha }} - restore-keys: | - ${{ runner.os }}-cygwin-chocolatey-${{ matrix.os }}- - ${{ runner.os }}-cygwin-chocolatey- - - name: chocolatey - run: choco install -y cygwin - - name: Install cygwin packages + path: ${{ env.package-dir }} + key: ${{ runner.os }}-cygwin-${{ env.cache-version }} + - name: Download Cygwin installer + shell: cmd + run: > + bitsadmin /transfer download /priority foreground + https://cygwin.com/setup-x86_64.exe ${{ env.installer-path }} + - name: Install Cygwin shell: cmd - run: C:\tools\cygwin\cygwinsetup.exe -qgnNdO -R C:/tools/cygwin -l C:/tools/cygwin/package -s http://mirrors.kernel.org/sourceware/cygwin/ -P gcc-core,gcc-g++,make,gperf,ruby - - name: Set ENV + run: > + ${{ env.installer-path }} + --quiet-mode --no-shortcuts --no-startmenu --no-desktop --no-admin + --only-site --site http://mirrors.kernel.org/sourceware/cygwin/ + --root ${{ env.cygwin-root }} + --local-package-dir ${{ env.package-dir }} + --packages gcc-core,gcc-g++,ruby + - name: Set PATH for Cygwin run: | - echo '::set-env name=PATH::C:\tools\cygwin\bin;C:\tools\cygwin\usr\bin' - - name: build and test + echo '::set-env name=PATH::${{ env.cygwin-root }}\bin;${{ env.cygwin-root }}\usr\bin' + - name: Ruby version shell: cmd - run: C:\tools\cygwin\bin\ruby.exe /usr/bin/rake -E 'STDOUT.sync=true' -m gensym all test + run: ruby -v + - name: Compiler version + run: ${{ env.CC }} --version + - name: Build and Test + shell: cmd + run: | + ruby /usr/bin/rake -E STDOUT.sync=true -m + ruby /usr/bin/rake -E STDOUT.sync=true test + - name: Set PATH for cache archiving (tar) + # set Windows path so that Cygwin tar is not used for cache archiving + run: echo '::set-env name=PATH::C:\windows\System32' Windows-VC: + needs: Check-Skip runs-on: windows-latest env: MRUBY_CONFIG: ci/msvc - # TODO(take-cheeze): Re-enable /O2 - CFLAGS: "/c /nologo /W3 /we4013 /Zi /MD /D_CRT_SECURE_NO_WARNINGS" - CXXFLAGS: "/c /nologo /W3 /Zi /MD /EHs /D_CRT_SECURE_NO_WARNINGS" steps: - - uses: actions/checkout@v1 - - name: chocolatey - run: choco install -y ruby gperf - - name: build and test + - uses: actions/checkout@v2 + - name: Ruby version + run: ruby -v + - name: Build and Test shell: cmd run: | call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars64.bat" - rake -E "STDOUT.sync=true" gensym all test + rake -E STDOUT.sync=true -m && rake -E STDOUT.sync=true test diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index ea9f9bd8e..19fb63b35 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -8,6 +8,10 @@ on: jobs: CodeQL-Build: + if: | + !contains(github.event.head_commit.message, '[ci skip]') && + !contains(github.event.head_commit.message, '[skip ci]') && + !contains(github.event.head_commit.message, '[skip gha]') runs-on: ubuntu-latest diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 60414e7dc..000000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: CIFuzz -on: [pull_request] -jobs: - Fuzzing: - runs-on: ubuntu-latest - steps: - - name: Build Fuzzers - uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master - with: - oss-fuzz-project-name: 'mruby' - dry-run: false - - name: Run Fuzzers - uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master - with: - oss-fuzz-project-name: 'mruby' - fuzz-seconds: 600 - dry-run: false - - name: Upload Crash - uses: actions/upload-artifact@v1 - if: failure() - with: - name: artifacts - path: ./out/artifacts diff --git a/.github/workflows/oss-fuzz.yml b/.github/workflows/oss-fuzz.yml new file mode 100644 index 000000000..8f2b24f17 --- /dev/null +++ b/.github/workflows/oss-fuzz.yml @@ -0,0 +1,27 @@ +name: CIFuzz +on: [pull_request] +jobs: + Fuzzing: + if: | + !contains(github.event.head_commit.message, '[ci skip]') && + !contains(github.event.head_commit.message, '[skip ci]') && + !contains(github.event.head_commit.message, '[skip gha]') + runs-on: ubuntu-latest + steps: + - name: Build Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master + with: + oss-fuzz-project-name: 'mruby' + dry-run: false + - name: Run Fuzzers + uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master + with: + oss-fuzz-project-name: 'mruby' + fuzz-seconds: 600 + dry-run: false + - name: Upload Crash + uses: actions/upload-artifact@v1 + if: failure() + with: + name: artifacts + path: ./out/artifacts -- cgit v1.2.3