From 7310e7bad4b9e87dcee76258107330ac9812b67a Mon Sep 17 00:00:00 2001 From: kimikage Date: Mon, 13 May 2024 16:28:57 +0900 Subject: [PATCH] Update workflows (#299) --- .github/dependabot.yml | 7 +++ .github/workflows/Invalidations.yml | 64 ++++++++++++++++++++++++ .github/workflows/TagBot.yml | 12 ++++- .github/workflows/UnitTest.yml | 44 ++++++++--------- .github/workflows/UnitTestArm.yml | 76 +++++++++++++++++++++++++++++ 5 files changed, 176 insertions(+), 27 deletions(-) create mode 100644 .github/dependabot.yml create mode 100644 .github/workflows/Invalidations.yml create mode 100644 .github/workflows/UnitTestArm.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..700707ce --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,7 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" # Location of package manifests + schedule: + interval: "weekly" diff --git a/.github/workflows/Invalidations.yml b/.github/workflows/Invalidations.yml new file mode 100644 index 00000000..954cb348 --- /dev/null +++ b/.github/workflows/Invalidations.yml @@ -0,0 +1,64 @@ +name: Invalidations + +on: + pull_request: + +concurrency: + # Skip intermediate builds: always. + # Cancel intermediate builds: always. + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + evaluate: + # Only run on PRs to the default branch. + # In the PR trigger above branches can be specified only explicitly whereas this check should work for master, main, or any other default branch + if: github.base_ref == github.event.repository.default_branch + runs-on: ubuntu-latest + steps: + - uses: julia-actions/setup-julia@v2 + with: + version: '1' + - uses: actions/checkout@v4 + - uses: julia-actions/julia-buildpkg@v1 + - name: Overwrite Package Version # FIXME + run: > + julia -e ' + lines = readlines("Project.toml") + open("Project.toml", "w") do f + for l in lines + if l == "version = \"0.9.0-dev\"" + l = "version = \"0.8.4\"" + end + println(f, l) + end + end' + - uses: julia-actions/julia-invalidations@v1 + id: invs_pr + + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.repository.default_branch }} + - uses: julia-actions/julia-buildpkg@v1 + - name: Overwrite Package Version # FIXME + run: > + julia -e ' + lines = readlines("Project.toml") + open("Project.toml", "w") do f + for l in lines + if l == "version = \"0.9.0-dev\"" + l = "version = \"0.8.4\"" + end + println(f, l) + end + end' + - uses: julia-actions/julia-invalidations@v1 + id: invs_default + + - name: Report invalidation counts + run: | + echo "Invalidations on default branch: ${{ steps.invs_default.outputs.total }} (${{ steps.invs_default.outputs.deps }} via deps)" >> $GITHUB_STEP_SUMMARY + echo "This branch: ${{ steps.invs_pr.outputs.total }} (${{ steps.invs_pr.outputs.deps }} via deps)" >> $GITHUB_STEP_SUMMARY + - name: Check if the PR does increase number of invalidations + if: steps.invs_pr.outputs.total > steps.invs_default.outputs.total + run: exit 1 diff --git a/.github/workflows/TagBot.yml b/.github/workflows/TagBot.yml index d77d3a0c..eb6c8610 100644 --- a/.github/workflows/TagBot.yml +++ b/.github/workflows/TagBot.yml @@ -1,9 +1,17 @@ name: TagBot on: - schedule: - - cron: 0 * * * * + issue_comment: + types: + - created + workflow_dispatch: + inputs: + lookback: + default: 3 +permissions: + contents: write jobs: TagBot: + if: github.event_name == 'workflow_dispatch' || github.actor == 'JuliaTagBot' runs-on: ubuntu-latest steps: - uses: JuliaRegistries/TagBot@v1 diff --git a/.github/workflows/UnitTest.yml b/.github/workflows/UnitTest.yml index 24695405..8f479b04 100644 --- a/.github/workflows/UnitTest.yml +++ b/.github/workflows/UnitTest.yml @@ -1,14 +1,13 @@ name: Unit test on: - create: - tags: push: branches: - master + - release-* + tags: ['*'] pull_request: - schedule: - - cron: '20 00 1 * *' + workflow_dispatch: jobs: test: @@ -16,40 +15,35 @@ jobs: strategy: fail-fast: false matrix: - julia-version: ['1.0', '1', 'nightly'] - os: [ubuntu-latest, windows-latest, macOS-latest] + julia-version: ['1.0', '1.6', '1', 'nightly'] + os: [ubuntu-latest, windows-latest, macos-13] julia-arch: [x64] - # only test one 32-bit job include: - - os: ubuntu-latest + - os: ubuntu-latest # only test one 32-bit job julia-version: '1' julia-arch: x86 + - os: macos-latest + julia-version: '1' + julia-arch: aarch64 + - os: macos-latest + julia-version: 'nightly' + julia-arch: aarch64 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: "Set up Julia" - uses: julia-actions/setup-julia@v1 + uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.julia-version }} arch: ${{ matrix.julia-arch }} - - name: Cache artifacts - uses: actions/cache@v1 - env: - cache-name: cache-artifacts - with: - path: ~/.julia/artifacts - key: ${{ runner.os }}-test-${{ env.cache-name }}-${{ hashFiles('**/Project.toml') }} - restore-keys: | - ${{ runner.os }}-test-${{ env.cache-name }}- - ${{ runner.os }}-test- - ${{ runner.os }}- + uses: julia-actions/cache@v2 - name: "Unit Test" - uses: julia-actions/julia-runtest@master + uses: julia-actions/julia-runtest@v1 - uses: julia-actions/julia-processcoverage@v1 - - uses: codecov/codecov-action@v1 + - uses: codecov/codecov-action@v4 with: + token: ${{ secrets.CODECOV_TOKEN }} # required + fail_ci_if_error: true file: lcov.info - - diff --git a/.github/workflows/UnitTestArm.yml b/.github/workflows/UnitTestArm.yml new file mode 100644 index 00000000..f1e8e4eb --- /dev/null +++ b/.github/workflows/UnitTestArm.yml @@ -0,0 +1,76 @@ +name: Unit test for Arm + +on: + push: + branches: + - master + - release-* + tags: ['*'] + pull_request: + workflow_dispatch: +permissions: + actions: write + contents: read +jobs: + test: + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + julia-version: ['1.0', '1.6', '1', 'nightly'] + os: [ubuntu-latest] + distro: [ubuntu_latest] + arch: [aarch64] + + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/setup-julia@v2 + with: + version: ${{ matrix.julia-version }} + - uses: julia-actions/cache@v2 + - name: Download Julia Binary + run: > + julia -e ' + using Pkg; Pkg.add("JSON"); using JSON; + if "${{ matrix.julia-version }}" == "nightly"; + url = "https://julialangnightlies-s3.julialang.org/bin/linux/${{ matrix.arch }}/julia-latest-linux-${{ matrix.arch }}.tar.gz"; + else; + path = download("https://julialang-s3.julialang.org/bin/versions.json"); + json = JSON.parsefile(path); + try rm(path) catch end; + vspec = Pkg.Types.VersionSpec("${{ matrix.julia-version }}"); + a(f) = f["arch"] == "${{ matrix.arch }}" && f["os"] == "linux" && !occursin("musl", f["triplet"]); + m = filter(json) do v; vn = VersionNumber(v[1]); vn in vspec && isempty(vn.prerelease) && any(a, v[2]["files"]); end; + v = sort(VersionNumber.(keys(m)))[end]; + url = filter(a, json[string(v)]["files"])[1]["url"]; + end; + download(url, "/tmp/julia-aarch64.tar.gz");' + + - name: Extract Julia Files + run: | + mkdir -p /home/runner/work/julia/ + tar -xf /tmp/julia-aarch64.tar.gz --strip-components=1 -C /home/runner/work/julia/ + rm /tmp/julia-aarch64.tar.gz + + - uses: uraimo/run-on-arch-action@v2.7.2 + name: Unit Test + with: + arch: ${{ matrix.arch }} + distro: ${{ matrix.distro }} + dockerRunArgs: | + -v "/home/runner/work/julia:/home/runner/work/julia" + -v "/home/runner/.julia/registries:/root/.julia/registries" + --net=host + install: | + ln -s /home/runner/work/julia/bin/julia /usr/local/bin/julia + echo /home/runner/work/julia/lib > /etc/ld.so.conf.d/julia.conf + mkdir -p /root/.julia/registries/General + run: | + julia --compile=min -O0 -e 'using InteractiveUtils; versioninfo();' + julia --project=. --check-bounds=yes --color=yes -e 'using Pkg; Pkg.build(); Pkg.test(coverage=true)' + - uses: julia-actions/julia-processcoverage@v1 + - uses: codecov/codecov-action@v4 + with: + token: ${{ secrets.CODECOV_TOKEN }} # required + fail_ci_if_error: true + file: lcov.info