diff --git a/.github/dependabot.yml b/.github/dependabot.yml index d88ba24b..df3f89d6 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,12 +1,5 @@ version: 2 updates: - - package-ecosystem: pip - directory: "/" - open-pull-requests-limit: 1 - schedule: - interval: daily - labels: - - automerge - package-ecosystem: github-actions directory: "/" open-pull-requests-limit: 1 @@ -14,10 +7,3 @@ updates: interval: daily labels: - automerge - - package-ecosystem: docker - directory: "/" - open-pull-requests-limit: 1 - schedule: - interval: daily - labels: - - automerge diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ce4e75e3..1a8c6621 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -13,108 +13,70 @@ concurrency: env: NPROC: '2' # Number of Julia processes to run the notebooks + JULIA_CPU_TARGET: 'generic;haswell,clone_all' + JULIA_NUM_THREADS: 'auto' + JULIA_CONDAPKG_BACKEND: 'Current' + JULIA_CI: 'true' + GKSwstype: '100' + JULIA_CACHE_NUM: '1' jobs: - setup: - permissions: - packages: write + CI: runs-on: ubuntu-latest - outputs: - hash: ${{ steps.hash.outputs.id }} steps: - name: Checkout repository uses: actions/checkout@v4 - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - name: Login to Docker Hub - uses: docker/login-action@v3 + - name: Setup micromamba + uses: mamba-org/setup-micromamba@v1 with: - registry: ghcr.io - username: ${{ github.repository_owner }} - password: ${{ github.token }} - - name: Get docker image hash - id: hash - run: echo "id=${{ hashFiles('requirements.txt', 'Project.toml', 'Manifest.toml', 'src/**', 'env.Dockerfile') }}" >> "$GITHUB_OUTPUT" - - name: Build and cache Docker container - uses: docker/build-push-action@v5 + environment-file: environment.yml + cache-environment: true + post-cleanup: all + - name: Read Julia version + uses: SebRollen/toml-action@v1.0.2 + id: read_toml with: - context: . - file: 'env.Dockerfile' - tags: ghcr.io/${{ github.repository }}:${{ steps.hash.outputs.id }} - push: true - cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:${{ steps.hash.outputs.id }} - cache-to: type=inline - - execute: - needs: setup - runs-on: ubuntu-latest - container: - image: ghcr.io/${{ github.repository }}:${{ needs.setup.outputs.hash }} - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Run program - env: - JULIA_PROJECT: '@.' - run: julia --color=yes -p ${{ env.NPROC }} literate.jl - - name: Upload Results - uses: actions/upload-artifact@v3 - with: - name: notebooks - path: docs/ - retention-days: 1 - - render: - needs: execute - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Download notebooks - uses: actions/download-artifact@v3 - with: - name: notebooks - path: out/ - - name: Display structure of downloaded files - run: ls -R - working-directory: out - - name: Copy back built notebooks - run: cp --verbose -rf out/* docs/ - - name: Setup micromamba - uses: mamba-org/setup-micromamba@v1 - with: - environment-file: jupyterbook.yml - init-shell: bash - cache-environment: true - post-cleanup: all - - name: Build website - shell: micromamba-shell {0} - run: jupyter-book build docs/ - - name: Upload pages artifact - if: ${{ github.ref == 'refs/heads/main' }} - uses: actions/upload-pages-artifact@v2 - with: - path: docs/_build/html - - # CI conclusion for GitHub status check - # Adaped from https://brunoscheufler.com/blog/2022-04-09-the-required-github-status-check-that-wasnt - CI: - needs: render - if: always() - runs-on: ubuntu-latest - steps: - - run: | - if [[ ${{ needs.render.result }} == "success" ]]; then - echo "Tests passed" - exit 0 - else - echo "Tests failed" - exit 1 - fi + file: 'Manifest.toml' + field: 'julia_version' + - name: Install Julia using jill.sh + run: | + wget -O /tmp/jill.sh https://raw.githubusercontent.com/abelsiqueira/jill/main/jill.sh + bash /tmp/jill.sh --version ${{ steps.read_toml.outputs.value }} -y + echo "$HOME/.local/bin" >> $GITHUB_PATH + - name: Cache Julia deps + uses: actions/cache@v3 + with: + path: | + ~/.julia/artifacts + ~/.julia/compiled + ~/.julia/packages + ~/.julia/environments + ~/.julia/scratchspaces + key: ${{ runner.os }}-jill-${{ env.JULIA_CACHE_NUM }}-${{ hashFiles('src/**','Project.toml', 'Manifest.toml')}} + restore-keys: | + ${{ runner.os }}-jill-${{ env.JULIA_CACHE_NUM }}- + - name: Install Julia deps + shell: micromamba-shell {0} + run: | + julia --color=yes -e 'using Pkg; Pkg.add(["PrettyTables", "Literate"])' + julia --project=@. --color=yes -e 'using Pkg, Dates; Pkg.instantiate(); Pkg.precompile(); Pkg.gc(collect_delay=Day(1))' + - name: Run program + shell: micromamba-shell {0} + env: + JULIA_PROJECT: '@.' + run: julia --color=yes -p ${{ env.NPROC }} literate.jl + - name: Build website + shell: micromamba-shell {0} + run: jupyter-book build docs/ + - name: Upload pages artifact + if: ${{ github.ref == 'refs/heads/main' }} + uses: actions/upload-pages-artifact@v2 + with: + path: docs/_build/html deploy: name: Deploy to GitHub pages - needs: render + needs: CI if: ${{ github.ref == 'refs/heads/main'}} # Grant GITHUB_TOKEN the permissions required to make a Pages deployment permissions: @@ -125,6 +87,6 @@ jobs: url: ${{ steps.deployment.outputs.page_url }} runs-on: ubuntu-latest steps: - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v2 + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/rm-old-image.yml b/.github/workflows/rm-old-image.yml deleted file mode 100644 index 7daf5350..00000000 --- a/.github/workflows/rm-old-image.yml +++ /dev/null @@ -1,27 +0,0 @@ -name: Remove old docker images - -on: - workflow_dispatch: - schedule: - - cron: '0 0 * * 1' # Every week - push: - branches: - - main - paths: - - .github/workflows/rm-old-image.yml - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - remove-old-images: - permissions: - packages: write - runs-on: ubuntu-latest - steps: - - uses: actions/delete-package-versions@v4 - with: - package-name: ${{ github.event.repository.name }} - package-type: 'container' - min-versions-to-keep: 3 diff --git a/.github/workflows/update-manifest.yml b/.github/workflows/update-manifest.yml index bd9419c1..45e51a62 100644 --- a/.github/workflows/update-manifest.yml +++ b/.github/workflows/update-manifest.yml @@ -16,7 +16,6 @@ concurrency: env: APP_ID: '189113' # https://github.com/apps/wen-wei-s-pr-bot - IMG_NAME: 'app:test' jobs: update-manifest: @@ -27,19 +26,12 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 - - name: Build and load docker image - uses: docker/build-push-action@v5 - with: - context: . - file: 'env.Dockerfile' - tags: ${{ env.IMG_NAME }} - load: true - target: base + - name: Setup Julia + uses: julia-actions/setup-julia@v1 - name: Update Julia dependencies - run: > - docker run --rm -e JULIA_PKG_PRECOMPILE_AUTO=0 - ${{ env.IMG_NAME }} - julia --color=yes --project=@. -e 'import Pkg; Pkg.update()' + env: + JULIA_PKG_PRECOMPILE_AUTO: '0' + run: julia --color=yes --project=@. -e 'import Pkg; Pkg.update()' # Authenticate with a custom GitHub APP # https://github.com/peter-evans/create-pull-request/blob/main/docs/concepts-guidelines.md#authenticating-with-github-app-generated-tokens - name: Generate token for PR diff --git a/env.Dockerfile b/env.Dockerfile deleted file mode 100644 index 5f7f60bd..00000000 --- a/env.Dockerfile +++ /dev/null @@ -1,27 +0,0 @@ -FROM julia:1.9.3 as julia -FROM python:3.12.0-slim as base - -# Julia config -ENV JULIA_CI true -ENV JULIA_NUM_THREADS 'auto' -# Let PythonCall use built-in python -ENV JULIA_CONDAPKG_BACKEND 'Null' -ENV JULIA_CPU_TARGET 'generic;haswell,clone_all' -ENV GKSwstype '100' -ENV JULIA_PATH /usr/local/julia/ -ENV JULIA_DEPOT_PATH /srv/juliapkg/ -ENV PATH ${JULIA_PATH}/bin:${PATH} -COPY --from=julia ${JULIA_PATH} ${JULIA_PATH} - -FROM base - -WORKDIR /work - -# Python dependencies. e.g. matplotlib -COPY requirements.txt ./ -RUN pip install --no-cache-dir -r requirements.txt - -# Julia environment -COPY Project.toml Manifest.toml ./ -COPY src/ src -RUN julia --color=yes -e 'using Pkg; Pkg.add(["PrettyTables", "Literate"]); Pkg.activate("."); Pkg.instantiate()' diff --git a/environment.yml b/environment.yml new file mode 100644 index 00000000..3c257969 --- /dev/null +++ b/environment.yml @@ -0,0 +1,10 @@ +name: ci + +dependencies: + - python>=3.11 + # Jupyter Book + - jupyter-book + - docutils>=0.17.1,<0.18|>=0.20 + # PythonPlot + # - matplotlib + # - libstdcxx-ng<13.0 diff --git a/jupyterbook.yml b/jupyterbook.yml deleted file mode 100644 index 3706e056..00000000 --- a/jupyterbook.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: jb -channels: - - conda-forge -dependencies: - - python>=3.11 - - jupyter-book - - docutils>=0.17.1,<0.18|>=0.20 diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e69de29b..00000000