PyAuto Release #410
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: PyAuto Release | |
on: | |
workflow_dispatch: | |
inputs: | |
minor_version: | |
description: 'Minor version to release' | |
required: true | |
default: '1' | |
skip_scripts: | |
description: 'Skip scripts' | |
required: false | |
default: 'false' | |
skip_notebooks: | |
description: 'Skip notebooks' | |
required: false | |
default: 'false' | |
skip_release: | |
description: 'Skip release' | |
required: false | |
default: 'false' | |
jobs: | |
version_number: | |
runs-on: ubuntu-latest | |
outputs: | |
version_number: ${{ steps.version_number.outputs.version_number }} | |
steps: | |
- name: Compute version number | |
run: | | |
export DATE_FORMATTED=`date +"%Y.%-m.%-d"` | |
MINOR_VERSION="${{ github.event.inputs.minor_version }}" | |
VERSION="${DATE_FORMATTED}.${MINOR_VERSION:-${{ github.run_number }}}" | |
RUN_ATTEMPT="${{ github.run_attempt }}" | |
if [ "$RUN_ATTEMPT" -gt "1" ] | |
then | |
VERSION="$VERSION.$RUN_ATTEMPT" | |
fi | |
export VERSION | |
echo "::set-output name=version_number::${VERSION}" | |
id: version_number | |
release_test_pypi: | |
runs-on: ubuntu-latest | |
needs: version_number | |
env: | |
TWINE_REPOSITORY: testpypi | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.TEST_PYPI }} | |
strategy: | |
matrix: | |
python-version: [3.11] | |
project: | |
- repository: rhayes777/PyAutoConf | |
ref: main | |
path: PyAutoConf | |
- repository: rhayes777/PyAutoFit | |
ref: feature/build_fixes | |
path: PyAutoFit | |
- repository: Jammy2211/PyAutoArray | |
ref: main | |
path: PyAutoArray | |
- repository: Jammy2211/PyAutoGalaxy | |
ref: main | |
path: PyAutoGalaxy | |
- repository: Jammy2211/PyAutoLens | |
ref: main | |
path: PyAutoLens | |
- repository: Jammy2211/PyAutoCTI | |
ref: main | |
path: PyAutoCTI | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
path: PyAutoBuild | |
- name: Checkout | |
uses: actions/checkout@v2 | |
with: | |
repository: "${{ matrix.project.repository }}" | |
ref: "${{ matrix.project.ref }}" | |
path: "${{ matrix.project.path }}" | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Build | |
run: | | |
pushd "${{ matrix.project.path }}" | |
export VERSION="${{ needs.version_number.outputs.version_number }}" | |
sed -i "s/__version__ = [\.\"\'0-9]*/__version__ = \"$VERSION\"/g" */__init__.py | |
python3 -m pip install --upgrade build | |
python3 -m build | |
popd | |
- name: Upload to test PyPI | |
run: | | |
python3 -m pip install twine | |
pushd "${{ matrix.project.path }}" | |
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/* | |
popd | |
- name: Wait for packages to upload to Pypi | |
shell: bash {0} # So that we do not exit if a command gives a bad exit code | |
run: | | |
export PACKAGES=("autoconf" "autoarray" "autofit" "autogalaxy" "autolens" "autocti") | |
export VERSION="${{ needs.version_number.outputs.version_number }}" | |
for PACKAGE in ${PACKAGES[@]}; do | |
python3 -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple $PACKAGE==$VERSION | |
test_condition=$? | |
cnt=0 | |
while [[ $test_condition != "0" ]]; do | |
echo "Failed to find package, retrying in 10 seconds.." | |
sleep 10 | |
((cnt=cnt+1)) | |
[[ $cnt == "100" ]] && echo "Timed out, tried 100 times" && break | |
python3 -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple $PACKAGE==$VERSION | |
test_condition=$? | |
done | |
done | |
- name: Tests | |
run: | | |
pushd "${{ matrix.project.path }}" | |
if test -f "optional_requirements.txt" | |
then | |
pip install -r requirements.txt | |
pip install -r optional_requirements.txt | |
fi | |
pip install matplotlib==3.6.0 | |
pip install pytest | |
python3 -m pytest | |
find_scripts: | |
runs-on: ubuntu-latest | |
outputs: | |
matrix: ${{ steps.script_matrix.outputs.matrix }} | |
steps: | |
- name: Checkout AutoFit | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autofit_workspace | |
path: autofit | |
- name: Checkout AutoGalaxy | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autogalaxy_workspace | |
path: autogalaxy | |
- name: Checkout AutoLens | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autolens_workspace | |
path: autolens | |
- name: Checkout AutoCTI | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autocti_workspace | |
path: autocti | |
- name: Checkout AutoFit Test | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autofit_workspace_test | |
path: autofit_test | |
- name: Checkout AutoLens Test | |
uses: actions/checkout@v2 | |
with: | |
repository: Jammy2211/autolens_workspace_test | |
path: autolens_test | |
- uses: actions/checkout@v2 | |
with: | |
path: PyAutoBuild | |
- name: Make script matrix | |
id: script_matrix | |
run: | | |
matrix="$(./PyAutoBuild/autobuild/script_matrix.py autofit autogalaxy autolens autocti autofit_test autolens_test)" | |
echo "::set-output name=matrix::$matrix" | |
run_scripts: | |
runs-on: ubuntu-latest | |
needs: | |
- release_test_pypi | |
- version_number | |
- find_scripts | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: [3.11] | |
project: | |
${{ fromJSON(needs.find_scripts.outputs.matrix) }} | |
steps: | |
- name: Configure | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
id: configure | |
run: | | |
if [ ${{ matrix.project.name }} == "autofit" ] | |
then | |
echo "::set-output name=repository::rhayes777/PyAutoFit" | |
echo "::set-output name=workspace_repository::Jammy2211/autofit_workspace" | |
echo "::set-output name=project::autofit" | |
elif [ ${{ matrix.project.name }} == "autogalaxy" ] | |
then | |
echo "::set-output name=repository::Jammy2211/PyAutoGalaxy" | |
echo "::set-output name=workspace_repository::Jammy2211/autogalaxy_workspace" | |
echo "::set-output name=project::autogalaxy" | |
elif [ ${{ matrix.project.name }} == "autolens" ] | |
then | |
echo "::set-output name=repository::Jammy2211/PyAutoLens" | |
echo "::set-output name=workspace_repository::Jammy2211/autolens_workspace" | |
echo "::set-output name=project::autolens" | |
elif [ ${{ matrix.project.name }} == "autocti" ] | |
then | |
echo "::set-output name=repository::Jammy2211/PyAutoCTI" | |
echo "::set-output name=workspace_repository::Jammy2211/autocti_workspace" | |
echo "::set-output name=project::autocti" | |
elif [ ${{ matrix.project.name }} == "autofit_test" ] | |
then | |
echo "::set-output name=repository::rhayes777/PyAutoFit" | |
echo "::set-output name=workspace_repository::Jammy2211/autofit_workspace_test" | |
echo "::set-output name=project::autofit" | |
else | |
echo "::set-output name=repository::Jammy2211/PyAutoLens" | |
echo "::set-output name=workspace_repository::Jammy2211/autolens_workspace_test" | |
echo "::set-output name=project::autolens" | |
fi | |
- uses: actions/checkout@v2 | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
with: | |
path: PyAutoBuild | |
- name: Checkout project | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
uses: actions/checkout@v2 | |
with: | |
repository: "${{ steps.configure.outputs.repository }}" | |
path: project | |
- name: Checkout workspace | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
uses: actions/checkout@v2 | |
with: | |
repository: ${{ steps.configure.outputs.workspace_repository }} | |
ref: main | |
path: workspace | |
- name: Set up Python ${{ matrix.python-version }} | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install optional requirements | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
run: | | |
if [ -f "project/optional_requirements.txt" ] | |
then | |
echo "Installing optional requirements" | |
python3 -m pip install -r "project/requirements.txt" | |
python3 -m pip install -r "project/optional_requirements.txt" | |
pip install matplotlib==3.6.0 | |
fi | |
- name: Install project | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
run: | | |
python3 -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "${{ steps.configure.outputs.project }}==${{ needs.version_number.outputs.version_number }}" | |
- name: Run Python scripts | |
if: "${{ github.event.inputs.skip_scripts != 'true' }}" | |
run: | | |
export PYTHONPATH=$PYTHONPATH:$(pwd)/PyAutoBuild | |
export PATH=$PATH:$(pwd)/PyAutoBuild/autobuild | |
AUTOBUILD_PATH="$(pwd)/PyAutoBuild/autobuild" | |
if [[ ${{ matrix.project.name }} == *_test ]] | |
then | |
export PYAUTOFIT_TEST_MODE=0 | |
else | |
export PYAUTOFIT_TEST_MODE=1 | |
fi | |
pushd workspace | |
python3 "$AUTOBUILD_PATH/run_python.py" ${{ matrix.project.name }} "scripts/${{ matrix.project.directory }}" | |
run_notebooks: | |
runs-on: ubuntu-latest | |
needs: | |
- release_test_pypi | |
- version_number | |
- find_scripts | |
strategy: | |
fail-fast: false | |
matrix: | |
python-version: [3.11] | |
project: | |
${{ fromJSON(needs.find_scripts.outputs.matrix) }} | |
steps: | |
- name: Configure | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
id: configure | |
run: | | |
if [ ${{ matrix.project.name }} == "autofit" ] | |
then | |
echo "::set-output name=repository::rhayes777/PyAutoFit" | |
echo "::set-output name=workspace_repository::Jammy2211/autofit_workspace" | |
echo "::set-output name=project::autofit" | |
elif [ ${{ matrix.project.name }} == "autogalaxy" ] | |
then | |
echo "::set-output name=repository::Jammy2211/PyAutoGalaxy" | |
echo "::set-output name=workspace_repository::Jammy2211/autogalaxy_workspace" | |
echo "::set-output name=project::autogalaxy" | |
elif [ ${{ matrix.project.name }} == "autolens" ] | |
then | |
echo "::set-output name=repository::Jammy2211/PyAutoLens" | |
echo "::set-output name=workspace_repository::Jammy2211/autolens_workspace" | |
echo "::set-output name=project::autolens" | |
else | |
echo "::set-output name=repository::Jammy2211/PyAutoCTI" | |
echo "::set-output name=workspace_repository::Jammy2211/autocti_workspace" | |
echo "::set-output name=project::autocti" | |
fi | |
- uses: actions/checkout@v2 | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
with: | |
path: PyAutoBuild | |
- name: Checkout project | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
uses: actions/checkout@v2 | |
with: | |
repository: "${{ steps.configure.outputs.repository }}" | |
path: project | |
- name: Checkout workspace | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
uses: actions/checkout@v2 | |
with: | |
repository: ${{ steps.configure.outputs.workspace_repository }} | |
ref: main | |
path: workspace | |
- name: Set up Python ${{ matrix.python-version }} | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install optional requirements | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
run: | | |
if [ -f "project/optional_requirements.txt" ] | |
then | |
echo "Installing optional requirements" | |
python3 -m pip install -r "project/requirements.txt" | |
python3 -m pip install -r "project/optional_requirements.txt" | |
pip install matplotlib==3.6.0 | |
fi | |
- name: Install project | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
run: | | |
python3 -m pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple "${{ steps.configure.outputs.project }}==${{ needs.version_number.outputs.version_number }}" | |
- name: Install Jupyter dependency | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
run: | | |
python3 -m pip install jupyter ipynb-py-convert | |
- name: Generate jupyter notebooks | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
run: | | |
export PYTHONPATH=$PYTHONPATH:$(pwd)/PyAutoBuild | |
AUTOBUILD_PATH="$(pwd)/PyAutoBuild/autobuild" | |
pushd "workspace" | |
python3 "$AUTOBUILD_PATH/generate.py" ${{ matrix.project.name }} | |
- name: Run jupyter notebooks | |
if: "${{ github.event.inputs.skip_notebooks != 'true' }}" | |
run: | | |
if [[ ${{ matrix.project.name }} == *_test ]] | |
then | |
export PYAUTOFIT_TEST_MODE=0 | |
else | |
export PYAUTOFIT_TEST_MODE=1 | |
fi | |
export PYTHONPATH=$PYTHONPATH:$(pwd)/PyAutoBuild | |
AUTOBUILD_PATH="$(pwd)/PyAutoBuild/autobuild" | |
pushd workspace | |
python3 "$AUTOBUILD_PATH/run.py" ${{ matrix.project.name }} "notebooks/${{ matrix.project.directory }}" | |
release: | |
runs-on: ubuntu-latest | |
env: | |
TWINE_REPOSITORY: pypi | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI }} | |
needs: | |
- run_scripts | |
- run_notebooks | |
- release_test_pypi | |
- version_number | |
strategy: | |
matrix: | |
project: | |
- repository: rhayes777/PyAutoConf | |
ref: main | |
path: PyAutoConf | |
pat: PAT_RICH | |
- repository: rhayes777/PyAutoFit | |
ref: feature/build_fixes | |
path: PyAutoFit | |
pat: PAT_RICH | |
- repository: Jammy2211/PyAutoArray | |
ref: main | |
path: PyAutoArray | |
pat: PAT_JAMES | |
- repository: Jammy2211/PyAutoGalaxy | |
ref: main | |
path: PyAutoGalaxy | |
pat: PAT_JAMES | |
- repository: Jammy2211/PyAutoLens | |
ref: main | |
path: PyAutoLens | |
pat: PAT_JAMES | |
- repository: Jammy2211/PyAutoCTI | |
ref: main | |
path: PyAutoCTI | |
pat: PAT_JAMES | |
steps: | |
- uses: actions/checkout@v2 | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
with: | |
path: PyAutoBuild | |
- name: Checkout | |
run: | | |
git clone -b "${{ matrix.project.ref }}" "https://$PAT@github.com/${{ matrix.project.repository }}.git" "${{ matrix.project.path }}" | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v2 | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Configure Git | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
git config --global user.email "richard@rghsoftware.co.uk" | |
git config --global user.name "GitHub Actions bot" | |
- name: Update version | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
pushd "${{ matrix.project.path }}" | |
VERSION="${{ needs.version_number.outputs.version_number }}" | |
sed -i "s/__version__ = [\.\"\'0-9]*/__version__ = \"$VERSION\"/g" */__init__.py | |
git commit "-am 'Updated version in __init__ to $VERSION" | |
- name: Tag | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
pushd "${{ matrix.project.path }}" | |
VERSION="${{ needs.version_number.outputs.version_number }}" | |
git tag -m "Release $VERSION" -a "$VERSION" | |
PAT="${{ secrets[matrix.project.pat] }}" | |
git remote set-url --push origin "https://$PAT@github.com/${{ matrix.project.repository }}.git" | |
git push --tags | |
- name: Build | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
pushd "${{ matrix.project.path }}" | |
export VERSION="${{ needs.version_number.outputs.version_number }}" | |
python3 -m pip install --upgrade build | |
python3 -m build | |
- name: Upload to PyPI | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
python3 -m pip install twine | |
pushd "${{ matrix.project.path }}" | |
python3 -m twine upload dist/* | |
release_workspaces: | |
runs-on: ubuntu-latest | |
env: | |
TWINE_REPOSITORY: pypi | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI }} | |
PAT: ${{ secrets.PAT_JAMES }} | |
needs: | |
- run_scripts | |
- run_notebooks | |
- release_test_pypi | |
- version_number | |
strategy: | |
matrix: | |
python-version: [3.11] | |
workspace: | |
- repository: Jammy2211/autofit_workspace | |
name: autofit - | |
- repository: Jammy2211/autogalaxy_workspace | |
name: autogalaxy | |
- repository: Jammy2211/autolens_workspace | |
name: autolens | |
- repository: Jammy2211/autocti_workspace | |
name: autocti | |
steps: | |
- uses: actions/checkout@v2 | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
with: | |
path: PyAutoBuild | |
- name: Checkout | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
git clone -b main "https://$PAT@github.com/${{ matrix.workspace.repository }}.git" workspace | |
- name: Configure Git | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
git config --global user.email "richard@rghsoftware.co.uk" | |
git config --global user.name "GitHub Actions bot" | |
- name: Set up Python ${{ matrix.python-version }} | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
uses: actions/setup-python@v2 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Install Jupyter dependency | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
pip install jupyter ipynb-py-convert PyYAML | |
- name: Update jupyter notebooks | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
export PYTHONPATH=$PYTHONPATH:$(pwd)/PyAutoBuild | |
AUTOBUILD_PATH="$(pwd)/PyAutoBuild/autobuild" | |
pushd workspace | |
python3 "$AUTOBUILD_PATH/generate.py" ${{ matrix.workspace.name }} | |
git add *.ipynb | |
git commit -m "Updated notebooks" || true | |
- name: Release | |
if: "${{ github.event.inputs.skip_release != 'true' }}" | |
run: | | |
cd workspace | |
git checkout release | |
git merge main | |
VERSION="${{ needs.version_number.outputs.version_number }}" | |
git tag -m "Release $VERSION" -a "$VERSION" | |
git push | |
git push --tags |