Skip to content

Refactor: updated caching code #57

Refactor: updated caching code

Refactor: updated caching code #57

Workflow file for this run

on: [push, pull_request]
name: release-please
jobs:
# linting:
# name: Linting
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - name: Install dependencies
# run: |
# python -m pip install --upgrade pip
# pip install black ruff
# - name: Autoformat with black
# run: |
# black .
# - name: Lint with ruff
# run: |
# ruff check LoopProjectFile --fix
# - uses: stefanzweifel/git-auto-commit-action@v5
# with:
# commit_message: "style: style fixes by ruff and autoformatting by black"
release-please:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/master'
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # Fetch all history for all tags and branches
- uses: GoogleCloudPlatform/release-please-action@v4
id: release
with:
release-type: python
package-name: LoopProjectFile
version-file: LoopProjectFile/version.py
outputs:
release_created: ${{ steps.release.outputs.release_created }}
# if a release is created then run the deploy scripts for github.io, conda, pypi and docker
# build-sdist:
# name: Build SDist
# runs-on: ubuntu-latest
# steps:
# - uses: actions/checkout@v4
# - name: Build SDist
# run: |
# pip install build
# python -m build
# - uses: actions/upload-artifact@v4
# with:
# name: loopprojectfile-dist
# path: dist/*.tar.gz
# compression-level: 0
# test-sdist:
# name: Test sdist
# needs: build-sdist
# runs-on: ubuntu-latest
# steps:
# - name: Create virtual environment
# # install uv and use it to create a virtual environment, then add it to
# # environment variables so that it is automatically activated and can be
# # used for tests below
# run: |
# curl -LsSf https://astral.sh/uv/install.sh | sh
# . $HOME/.cargo/env
# uv venv .venv
# echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV
# echo "$PWD/.venv/bin" >> $GITHUB_PATH
# - name: Download sdist from artifacts
# uses: actions/download-artifact@v4
# with:
# name: loopprojectfile-dist
# path: dist
# - name: Build LPF from sdist and install test dependencies
# shell: bash
# run: |
# uv pip install --no-cache dist/*.tar.gz
# uv pip install netCDF4>=1.5.4 numpy pandas pytest
# uv pip list
# build-wheels:
# needs: [build-sdist, test-sdist]
# name: Build Wheels
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# os:
# - ubuntu-latest
# - macos-latest
# - macos-12
# - macos-13
# - macos-14
# - macos-15
# - windows-latest
# - windows-2019
# steps:
# - uses: actions/checkout@v4
# - name: Build Wheels
# run: |
# pip install netCDF4>=1.5.4 --only-binary :all:
# pip install build numpy pandas pytest
# python -m build --wheel
# - uses: actions/upload-artifact@v4
# with:
# name: loopprojectfile-wheels-${{ matrix.os }}
# path: dist/*.whl
# compression-level: 0
# test-wheels:
# name: Test wheels on ${{ matrix.os }} (Python ${{ matrix.python-version }})
# needs: build-wheels
# runs-on: ${{ matrix.os }}
# strategy:
# fail-fast: false
# matrix:
# os:
# - ubuntu-latest
# - macos-latest
# - macos-12
# - macos-13
# - macos-14
# - macos-15
# - windows-latest
# - windows-2019
# python-version: ["3.9", "3.10", "3.11", "3.12"]
# include:
# - os: "ubuntu-latest"
# artifact: loopprojectfile-wheels-ubuntu-latest
# - os: "macos-latest"
# artifact: loopprojectfile-wheels-macos-latest
# - os: "macos-12"
# artifact: loopprojectfile-wheels-macos-12
# - os: "macos-13"
# artifact: loopprojectfile-wheels-macos-13
# - os: "macos-14"
# artifact: loopprojectfile-wheels-macos-14
# - os: "macos-15"
# artifact: loopprojectfile-wheels-macos-15
# - os: "windows-2019"
# artifact: loopprojectfile-wheels-windows-2019
# - os: "windows-latest"
# artifact: loopprojectfile-wheels-windows-latest
# steps:
# - name: Checkout
# uses: actions/checkout@v4
# - name: Set up Python
# uses: actions/setup-python@v5
# with:
# python-version: ${{ matrix.python-version }}
# allow-prereleases: true
# - name: Upgrade pip
# run: |
# python -m pip install --upgrade pip
# - name: Create virtual environment (Linux / MacOS)
# # install uv and use it to create a virtual environment, then add it to
# # environment variables so that it is automatically activated and can be
# # used for tests below
# if: ${{ runner.os != 'Windows' }}
# shell: bash
# run: |
# curl -LsSf https://astral.sh/uv/install.sh | sh
# . $HOME/.cargo/env
# uv venv .venv
# echo "VIRTUAL_ENV=.venv" >> $GITHUB_ENV
# echo "$PWD/.venv/bin" >> $GITHUB_PATH
# - name: Create virtual environment (Windows)
# if: ${{ runner.os == 'Windows' }}
# run: |
# irm https://astral.sh/uv/install.ps1 | iex
# uv venv .venv
# "VIRTUAL_ENV=.venv" | Out-File -FilePath $env:GITHUB_ENV -Append
# "$PWD/.venv/Scripts" | Out-File -FilePath $env:GITHUB_PATH -Append
# - name: Download wheels from artifacts
# uses: actions/download-artifact@v4
# with:
# name: ${{ matrix.artifact }}
# path: dist
# - name: Install dependencies and LoopProjectFile wheel
# shell: bash
# run: |
# uv pip install --upgrade pip
# uv pip install netCDF4>=1.5.4 --only-binary :all:
# uv pip install numpy pandas pytest
# uv pip install --no-cache --pre --no-index --find-links dist loopprojectfile
# uv pip list
conda-continuous-integration:
name: Continuous integration ${{ matrix.os }} - Python Version-${{ matrix.python-version }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- macos-12
- macos-13
- macos-14
- macos-15
- windows-latest
- windows-2019
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: actions/checkout@v4
with:
python-version: ${{ matrix.python-version }}
# Cache conda environments
- name: Caching conda environment dependencies
id: cache-conda
uses: actions/cache@v4
env:
cache-name: cache-conda-env
CACHE_NUMBER: 0
with:
path: ~/conda_pkgs_dir # path for caching Conda packages
key: conda-${{ matrix.os }}-python-${{ matrix.python-version }}-${{env.cache-name}}-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
conda-${{ matrix.os }}-python-${{ matrix.python-version }}-${{env.cache-name}}-
conda-${{ matrix.os }}-python-${{ matrix.python-version }}-
conda-${{ matrix.os }}-python-
- uses: conda-incubator/setup-miniconda@v3
with:
activate-environment: anaconda-client-env
use-only-tar-bz2: true
- name: Set Conda PKGS_DIRS environment variable
run: |
echo "CONDA_PKGS_DIRS=~/conda_pkgs_dir" >> $GITHUB_ENV
- name: Install Cygwin
if: ${{runner.os == 'Windows'}}
shell: pwsh
run: |
# Download Cygwin installer
curl -L -o cygwin-installer.exe https://cygwin.com/setup-x86_64.exe
# Install Cygwin with the default base packages (including cygpath)
.\cygwin-installer.exe -q -n -N -d -R C:\cygwin64
echo "C:\cygwin64\bin" | Out-File -Append -Encoding ASCII $env:GITHUB_PATH
echo "MSYSTEM=CYGWIN" >> $GITHUB_ENV
# Verify that cygpath is available
cygpath --help
- name: Installing dependencies - Linux/MacOS
if: ${{ runner.os != 'Windows' }}
shell: bash -l {0}
run: |
conda install --solver=classic -c conda-forge conda-build anaconda-client -y
conda install -c conda-forge -c loop3d --file requirements.txt -y
- name: Installing dependencies - Windows
if: ${{ runner.os == 'Windows' }}
shell: pwsh
run: |
conda install --solver=classic -c conda-forge conda-build anaconda-client -y
conda install -c conda-forge -c loop3d --file requirements.txt -y
- name: Building and install
shell: bash -l {0}
run: |
pip install . --user
conda-deploy:
name: Building conda package for ${{ matrix.os }} - Python Version-${{ matrix.python-version }}
needs: conda-continuous-integration
runs-on: ${{matrix.os}}
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macos-latest
- macos-12
- macos-13
- macos-14
- macos-15
- windows-latest
- windows-2019
python-version: ["3.9", "3.10", "3.11", "3.12"]
steps:
- uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
python-version: ${{ matrix.python-version }}
- uses: actions/checkout@v4
- name: update submodules
shell: bash
run: |
git submodule update --init --recursive
# Restore the cached Conda packages to speed up the build
- name: Restore cached dependencies
uses: actions/cache@v4
env:
cache-name: cache-conda-env
with:
path: ~/conda_pkgs_dir # Restore Conda packages cache
key: conda-${{ matrix.os }}-python-${{ matrix.python-version }}-${{env.cache-name}}-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
conda-${{ matrix.os }}-python-${{ matrix.python-version }}-${{env.cache-name}}-
conda-${{ matrix.os }}-python-${{ matrix.python-version }}-
conda-${{ matrix.os }}-python-
- uses: conda-incubator/setup-miniconda@v3
with:
python-version: ${{ matrix.python-version }}
auto-update-conda: true
activate-environment: anaconda-client-env
channel-priority: strict
use-only-tar-bz2: true
- name: Set Conda PKGS_DIRS environment variable
run: |
echo "CONDA_PKGS_DIRS=~/conda_pkgs_dir" >> $GITHUB_ENV
- name: Conda build
env:
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_TOKEN }}
path: ~/conda_pkgs_dir
shell: bash -l {0}
run: |
conda install --solver=classic -c conda-forge conda-build anaconda-client -y
conda build -c anaconda -c conda-forge -c loop3d --output-folder conda conda --python ${{ matrix.python-version }}
conda install anaconda-client -y
- name: upload artifacts
uses: actions/upload-artifact@v4
with:
name: conda-${{ matrix.os }}-${{ matrix.python-version }}
path: conda
upload_to_conda:
needs: [release-please, conda-deploy]
runs-on: ${{matrix.os}}
strategy:
fail-fast: false
matrix:
os: ["ubuntu-latest"]
python-version: ["3.9", "3.10", "3.11", "3.12"]
if: ${{ needs.release-please.outputs.release_created }}
steps:
- uses: actions/download-artifact@v4
with:
name: conda-${{ matrix.os }}-${{ matrix.python-version }}
path: conda
- uses: conda-incubator/setup-miniconda@v3
- name: upload all files to conda-forge
shell: bash -l {0}
env:
ANACONDA_API_TOKEN: ${{ secrets.ANACONDA_TOKEN }}
with:
skip-existing: true
verbose: true
run: |
conda install -c anaconda anaconda-client -y
anaconda upload --label main conda/*/*.tar.bz2
# upload_to_pypi:
# runs-on: "ubuntu-latest"
# needs: [release-please, test-wheels]
# if: ${{ needs.release-please.outputs.release_created }}
# permissions:
# # IMPORTANT: this permission is mandatory for trusted publishing
# id-token: write
# steps:
# - uses: actions/download-artifact@v4
# with:
# name: loopprojectfile-dist
# path: dist/
# - uses: pypa/gh-action-pypi-publish@release/v1
# with:
# skip-existing: true
# verbose: true