diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 700707ce..03e0bffb 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -5,3 +5,4 @@ updates: directory: "/" # Location of package manifests schedule: interval: "weekly" + target-branch: "dev" diff --git a/.github/workflows/Docs.yml b/.github/workflows/Docs.yml new file mode 100644 index 00000000..37fee9e8 --- /dev/null +++ b/.github/workflows/Docs.yml @@ -0,0 +1,21 @@ +name: Documenter +on: + push: + branches: [main, master, dev] + tags: [v*] + pull_request: +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +jobs: + Documenter: + permissions: + contents: write + statuses: write + name: Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: julia-actions/julia-docdeploy@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/Downgrade.yml b/.github/workflows/Downgrade.yml index 8e66c1db..06dc278e 100644 --- a/.github/workflows/Downgrade.yml +++ b/.github/workflows/Downgrade.yml @@ -1,15 +1,16 @@ name: Downgrade on: pull_request: - branches: - - master + branches: [main, master, dev] paths-ignore: - 'docs/**' push: - branches: - - master + branches: [main, master, dev] paths-ignore: - 'docs/**' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: test: runs-on: ubuntu-latest @@ -18,11 +19,11 @@ jobs: version: ['1'] steps: - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v1 + - uses: julia-actions/setup-julia@v2 with: version: ${{ matrix.version }} - - uses: cjdoris/julia-downgrade-compat-action@v1 + - uses: julia-actions/julia-downgrade-compat@v1 with: - skip: Pkg,TOML,Mmap + skip: Pkg, TOML, Mmap - uses: julia-actions/julia-buildpkg@v1 - uses: julia-actions/julia-runtest@v1 diff --git a/.github/workflows/Invalidations.yml b/.github/workflows/Invalidations.yml index 66c86a36..decf2561 100644 --- a/.github/workflows/Invalidations.yml +++ b/.github/workflows/Invalidations.yml @@ -2,6 +2,7 @@ name: Invalidations on: pull_request: + branches: [main, master, dev] concurrency: # Skip intermediate builds: always. @@ -11,9 +12,6 @@ concurrency: 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 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d31f815b..7383441c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,14 +1,13 @@ name: CI on: pull_request: - branches: - - master - - dev + branches: [main, master, dev] push: - branches: - - master - - dev + branches: [main, master, dev] tags: '*' +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true jobs: test: name: Tests, Julia ${{ matrix.version }} - ${{ matrix.os }} - ${{ matrix.arch }} - ${{ github.event_name }} @@ -16,25 +15,14 @@ jobs: strategy: fail-fast: false matrix: - version: - - '1.6' - - '1' - - 'nightly' - os: [ubuntu-latest, windows-latest, macos-latest] # adjust according to need, e.g. os: [ubuntu-latest] if testing only on linux - arch: - - x64 + version: ['min', '1', 'nightly'] + os: [ubuntu-latest, windows-latest, macos-latest] + arch: [x64] include: - os: ubuntu-latest version: '1' arch: x86 steps: - # Cancel ongoing CI test runs if pushing to branch again before the previous tests - # have finished - - name: Cancel ongoing test runs for previous commits - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - # Do tests - uses: actions/checkout@v4 - uses: julia-actions/setup-julia@v2 @@ -49,31 +37,3 @@ jobs: with: token: ${{ secrets.CODECOV_TOKEN }} file: lcov.info - docs: - name: Documentation - runs-on: ubuntu-latest - steps: - # Cancel ongoing documentation build if pushing to branch again before the previous - # build is finished. - - name: Cancel ongoing documentation builds for previous commits - uses: styfle/cancel-workflow-action@0.12.1 - with: - access_token: ${{ github.token }} - - # Build docs - - uses: actions/checkout@v4 - - uses: julia-actions/setup-julia@v2 - with: - version: '1' - - name: Instantiate and install dependencies - run: | - julia --project=docs -e ' - using Pkg - Pkg.develop(PackageSpec(path=pwd())) - Pkg.instantiate()' - - name: Generate documentation and deploy - env: # needed for pushing to gh-pages branch - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - DOCUMENTER_KEY: ${{ secrets.DOCUMENTER_KEY }} # For authentication with SSH deploy key - run: - julia --project=docs docs/make.jl diff --git a/.github/workflows/stale_preview_removal.yml b/.github/workflows/stale_preview_removal.yml new file mode 100644 index 00000000..67fa01bf --- /dev/null +++ b/.github/workflows/stale_preview_removal.yml @@ -0,0 +1,71 @@ +name: Doc Preview Cleanup + +on: + schedule: + - cron: "0 0 * * *" + +jobs: + doc-preview-cleanup: + runs-on: ubuntu-latest + steps: + - name: Checkout gh-pages branch + uses: actions/checkout@v4 + with: + ref: gh-pages + - uses: julia-actions/setup-julia@v2 + - name: Check for stale PR previews + shell: julia {0} + run: | + using Pkg + pkg"activate --temp" + pkg"add HTTP JSON3" + + using HTTP + using JSON3 + using Dates + + repo = ENV["GITHUB_REPOSITORY"] + retention_days = 14 + + pr_previews = map(filter(startswith("PR"), readdir("previews"))) do dir + parse(Int, match(r"PR(\d*)", dir)[1]) + end + + function all_prs() + query_prs(page) = JSON3.read(HTTP.get("https://api.github.com/repos/$repo/pulls?per_page=100;page=$(page)").body) + prs = [] + page = 1 + while true + page_prs = query_prs(page) + isempty(page_prs) && break + append!(prs, page_prs) + page += 1 + end + return prs + end + prs = all_prs() + open_within_threshold = map(x -> x.number, filter(prs) do pr + time = DateTime(pr.updated_at[1:19], ISODateTimeFormat) + return pr.state == "open" && Dates.days(now() - time) <= retention_days + end) + + stale_previews = setdiff(pr_previews, open_within_threshold) + @info "Found $(length(stale_previews)) stale previews" + + if isempty(stale_previews) + @info "No stale previews" + exit(1) + end + + for pr in stale_previews + path = joinpath("previews", "PR$pr") + @info "Removing $path" + run(`git rm -rf $path`) + end + - name: Push changes + run: | + git config user.name "Documenter.jl" + git config user.email "documenter@juliadocs.github.io" + git commit -m "delete preview" + git branch gh-pages-new $(echo "delete history" | git commit-tree HEAD^{tree}) + git push --force origin gh-pages-new:gh-pages \ No newline at end of file