ci: update lint workflow, fix caching #64
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: CI | |
on: | |
push: | |
branches: [main] | |
paths-ignore: ['**/*.md'] | |
pull_request: | |
paths-ignore: ['**/*.md'] | |
env: | |
WORK_PATH: /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }}/ | |
GHA_PATH: ${{ github.event.repository.name }}-gha | |
jobs: | |
setup: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Install V | |
uses: vlang/setup-v@v1.3 | |
with: | |
check-latest: true | |
- if: ${{ steps.cache-status.outputs.cache-hit != 'true' }} | |
name: Add V Version to Environment | |
run: echo "V_VER=$(v -v)" >> $GITHUB_ENV | |
- if: ${{ steps.cache-status.outputs.cache-hit != 'true' }} | |
name: Cache V | |
uses: actions/cache/save@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v-${{ env.V_VER }} | |
lint: | |
needs: setup | |
uses: tobealive/bartender/.github/workflows/lint.yml@main | |
simple-build: | |
needs: setup | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
trimming: [null, -skip-unused] | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: ${{ matrix.trimming }} build | |
run: v -cg -shared ${{ matrix.trimming }} ${{ env.GHA_PATH }} | |
test: | |
needs: simple-build | |
runs-on: ubuntu-latest | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: Run tests | |
run: v test ${{ env.GHA_PATH }} | |
setup-clang: | |
needs: [lint, test] | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check if LLVM and Clang is cached | |
id: check-llvm-cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}llvm | |
key: llvm-15 | |
- if: ${{ steps.check-llvm-cache.outputs.cache-hit != 'true' }} | |
name: Install LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: '15' | |
- if: ${{ steps.check-llvm-cache.outputs.cache-hit != 'true' }} | |
name: Cache LLVM and Clang | |
uses: actions/cache/save@v3 | |
with: | |
path: ${{ env.WORK_PATH }}llvm | |
key: llvm-15 | |
different-compilers: | |
needs: setup-clang | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
compiler: [gcc, clang] | |
trimming: [null, -skip-unused] | |
optimization: [null, -prod] | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- if: ${{ matrix.compiler == 'gcc' }} | |
name: Setup GCC | |
run: | | |
sudo apt-get update | |
sudo apt-get install --quiet -y build-essential | |
- if: ${{ matrix.compiler == 'clang' }} | |
name: Restore LLVM and Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}llvm | |
key: llvm-15 | |
fail-on-cache-miss: true | |
- if: ${{ matrix.compiler == 'clang' }} | |
name: Setup LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: '15' | |
cached: true | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- if: ${{ matrix.compiler == 'clang' }} | |
name: ${{ matrix.compiler }} ${{ matrix.trimming }} build | |
run: v -cg -shared -cc ${{ matrix.compiler }} ${{ matrix.trimming }} ${{ env.GHA_PATH }} | |
- if: ${{ matrix.compiler == 'gcc' }} | |
name: ${{ matrix.compiler }} ${{ matrix.trimming }} ${{ matrix.optimization }} build | |
run: v -cg -shared -cc ${{ matrix.compiler }} ${{ matrix.trimming }} ${{ matrix.optimization }} ${{ env.GHA_PATH }} | |
clang-sanitizers: | |
needs: different-compilers | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
sanitizer: [address, memory, undefined, leak] # TODO: thread sanitizer was removed due to strange warnings. It should be fixed and turned on. | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Restore LLVM and Clang Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}llvm | |
key: llvm-15 | |
fail-on-cache-miss: true | |
- name: Setup LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: '15' | |
cached: true | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: Clang ${{ matrix.sanitizer }} sanitizer | |
run: v -cc clang -cflags -fsanitize=${{ matrix.sanitizer }} test ${{ env.GHA_PATH }} | |
gcc-sanitizers: | |
needs: different-compilers | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
sanitizer: [leak] # TODO: thread sanitizer was removed due to strange warnings. It should be fixed and turned on. | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Set up GCC | |
run: | | |
sudo apt-get update | |
sudo apt-get install --quiet -y build-essential | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: GCC ${{ matrix.sanitizer }} sanitizer | |
run: v -cc gcc -cflags -fsanitize=${{ matrix.sanitizer }} test ${{ env.GHA_PATH }} | |
gcc-address-sanitizers: | |
needs: different-compilers | |
runs-on: ubuntu-latest | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Set up GCC | |
run: | | |
sudo apt-get update | |
sudo apt-get install --quiet -y build-essential | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: GCC address sanitizer | |
run: v -cc gcc -cflags -fsanitize=address -cflags -fsanitize-address-use-after-scope -cflags -fsanitize=pointer-compare -cflags -fsanitize=pointer-subtract test ${{ env.GHA_PATH }} | |
gcc-undefined-sanitizers: | |
needs: different-compilers | |
runs-on: ubuntu-latest | |
steps: | |
- name: Restore V Cache | |
uses: actions/cache/restore@v3 | |
with: | |
path: ${{ env.WORK_PATH }}vlang/ | |
key: ${{ runner.os }}-v- | |
fail-on-cache-miss: true | |
- name: Setup V | |
uses: vlang/setup-v@v1.3 | |
- name: Set up GCC | |
run: | | |
sudo apt-get update | |
sudo apt-get install --quiet -y build-essential | |
- name: Checkout ${{ github.event.repository.name }} | |
uses: actions/checkout@v3 | |
with: | |
path: ${{ env.GHA_PATH }} | |
- name: GCC undefined sanitizer | |
run: v -cc gcc -cflags -fsanitize=undefined -cflags -fsanitize=shift -cflags -fsanitize=shift-exponent -cflags -fsanitize=shift-base -cflags -fsanitize=integer-divide-by-zero -cflags -fsanitize=unreachable -cflags -fsanitize=vla-bound -cflags -fsanitize=null -cflags -fsanitize=return -cflags -fsanitize=signed-integer-overflow -cflags -fsanitize=bounds -cflags -fsanitize=bounds-strict -cflags -fsanitize=alignment -cflags -fsanitize=object-size -cflags -fsanitize=float-divide-by-zero -cflags -fsanitize=float-cast-overflow -cflags -fsanitize=nonnull-attribute -cflags -fsanitize=returns-nonnull-attribute -cflags -fsanitize=bool -cflags -fsanitize=enum -cflags -fsanitize=vptr -cflags -fsanitize=pointer-overflow -cflags -fsanitize=builtin test ${{ env.GHA_PATH }} |