diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c79fc93b85..6cc67eb6ab 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,8 +4,11 @@ name: Build Python Wheels on: pull_request: - # Running on PRs is enough - # push: + # Running on PRs and main branch only + # pull requests should be able to access cache from main branch + push: + branches: + - master release: types: [published] @@ -49,7 +52,7 @@ jobs: HOST_CCACHE_DIR="$(ccache -k cache_dir)" mkdir -p $HOST_CCACHE_DIR - name: Build wheels # check https://cibuildwheel.readthedocs.io/en/stable/setup/#github-actions - uses: pypa/cibuildwheel@v2.12.3 + uses: pypa/cibuildwheel@v2.13.0 # to supply options, put them in 'env', like: # env: # CIBW_SOME_OPTION: value @@ -71,15 +74,12 @@ jobs: with: path: ./wheelhouse/*.whl -# The following was taken from https://cibuildwheel.readthedocs.io/en/stable/deliver-to-pypi/ + # The following was taken from https://cibuildwheel.readthedocs.io/en/stable/deliver-to-pypi/ make_sdist: name: Make SDist runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - with: - fetch-depth: 0 # Optional, use if you use setuptools_scm - submodules: true # Optional, use if you have submodules + - uses: actions/checkout@v3 - name: Build SDist run: pipx run build --sdist @@ -102,7 +102,7 @@ jobs: with: user: __token__ password: ${{ secrets.test_pypi_password }} - repository_url: https://test.pypi.org/legacy/ + repository-url: https://test.pypi.org/legacy/ upload_to_pypi: needs: [build, make_sdist] diff --git a/.github/workflows/cache-maintenance.yml b/.github/workflows/cache-maintenance.yml new file mode 100644 index 0000000000..ec933b1f1b --- /dev/null +++ b/.github/workflows/cache-maintenance.yml @@ -0,0 +1,35 @@ +name: cleanup caches by a branch +# https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#force-deleting-cache-entries +# Caches are very large and must be deleted to prioritize main branch's caches. +on: + pull_request: + types: + - closed + +jobs: + cleanup: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v3 + + - name: Cleanup + run: | + gh extension install actions/gh-actions-cache + + REPO=${{ github.repository }} + BRANCH="refs/pull/${{ github.event.pull_request.number }}/merge" + + echo "Fetching list of cache key" + cacheKeysForPR=$(gh actions-cache list -R $REPO -B $BRANCH | cut -f 1 ) + + ## Setting this to not fail the workflow while deleting cache keys. + set +e + echo "Deleting caches..." + for cacheKey in $cacheKeysForPR + do + gh actions-cache delete $cacheKey -R $REPO -B $BRANCH --confirm + done + echo "Done" + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/scripts/make_stubs.sh b/scripts/make_stubs.sh index 1df806a28a..b5fc4a9f9e 100755 --- a/scripts/make_stubs.sh +++ b/scripts/make_stubs.sh @@ -1,29 +1,40 @@ #!/bin/bash -e -# Generates LVS and DRC documentation +# Generates pyi stubs # # Run this script from a valid build below the repository root, e.g. -# /build-debug. It needs to have a "pymod" installation in +# /build-debug. It needs to have a "pymod" installation in # current directory. inst=$(realpath $(dirname $0)) -scripts=${inst}/drc_lvs_doc -ld=$(realpath .) -pymod="$ld/pymod" +## Detect if klayout pymod libraries are installed +python= +for try_python in python python3; do + if $try_python -c "import klayout.tl" >/dev/null 2>&1; then + python=$try_python + fi +done -export LD_LIBRARY_PATH=$ld -export PYTHONPATH=$pymod +if [ "$python" = "" ]; then + echo "*** Searching for pymod..." -pymod_src=$ld/../src/pymod -if ! [ -e $pymod_src ]; then - echo "*** ERROR: missing pymod sources ($pymod_src) - did you run the script from the build folder below the source tree?" - exit 1 -fi + ld=$(realpath .) + pymod="$ld/pymod" -if ! [ -e $pymod ]; then - echo "*** ERROR: missing pymod folder ($pymod) - did you run the script from the build folder?" - exit 1 + export LD_LIBRARY_PATH=$ld + export PYTHONPATH=$pymod + + pymod_src=$ld/../src/pymod + if ! [ -e $pymod_src ]; then + echo "*** ERROR: missing pymod sources ($pymod_src) - did you run the script from the build folder below the source tree?" + exit 1 + fi + + if ! [ -e $pymod ]; then + echo "*** ERROR: missing pymod folder ($pymod) - did you run the script from the build folder?" + exit 1 + fi fi python= @@ -38,20 +49,21 @@ if [ "$python" = "" ]; then exit 1 fi +pyi_srcdir="$inst/../src/pymod/distutils_src/klayout" + echo "Generating stubs for tl .." -$python $inst/stubgen.py tl >$pymod_src/distutils_src/klayout/tlcore.pyi +$python $inst/stubgen.py tl >$pyi_srcdir/tlcore.pyi echo "Generating stubs for db .." -$python $inst/stubgen.py db tl >$pymod_src/distutils_src/klayout/dbcore.pyi +$python $inst/stubgen.py db tl >$pyi_srcdir/dbcore.pyi echo "Generating stubs for rdb .." -$python $inst/stubgen.py rdb tl,db >$pymod_src/distutils_src/klayout/rdbcore.pyi +$python $inst/stubgen.py rdb tl,db >$pyi_srcdir/rdbcore.pyi echo "Generating stubs for lay .." -$python $inst/stubgen.py lay tl,db,rdb >$pymod_src/distutils_src/klayout/laycore.pyi +$python $inst/stubgen.py lay tl,db,rdb >$pyi_srcdir/laycore.pyi echo "Generating stubs for lib .." -$python $inst/stubgen.py lib tl,db >$pymod_src/distutils_src/klayout/libcore.pyi +$python $inst/stubgen.py lib tl,db >$pyi_srcdir/libcore.pyi echo "Done." -