@@ -132,62 +132,81 @@ jobs:
132132 if : ${{ "{{" }} needs.set_github_outputs.outputs.TESTS_ENABLED == 'true' {{ "}}" }}
133133 strategy :
134134 matrix : ${{ "{{" }}fromJSON(needs.set_github_outputs.outputs.matrix){{ "}}" }}
135+ env :
136+ WHEELS_PIP_DIR : " wheels-pip"
135137 steps :
136138 - run : echo "Platform -> ${{ "{{" }} matrix.platform {{ "}}" }} , Python -> ${{ "{{" }} matrix.python-version {{ "}}" }}"
137- - uses : actions/checkout@v3
138139 - name : Set up Python ${{ "{{" }} matrix.python-version {{ "}}" }}
139- uses : actions/setup-python@v4
140+ uses : actions/setup-python@v5
140141 with :
141142 python-version : ${{ "{{" }} matrix.python-version {{ "}}" }}
142143 - run : python -m pip install --upgrade pip && python -m pip install tox==3.28 tox-gh-actions
143144
145+ - uses : actions/checkout@v4
146+
147+ - name : Pin 'Static Type Checking' Dependencies
148+ run : tox -vv -s false -e pin-deps -- -E typing
149+
144150 - name : Do Type Checking
145151 run : tox -e type -vv -s false
146152
147- # Steps 'Run Unit Tests' and 'Check for compliance with Python Best Practices'
148- # require the PKG_VERSION environment variable at runtime
149-
150- # We want to read the Version value from a file, that is part of the
151- # Python Distro (.tar.gz, or wheel)
152- - name : ' Define executable Parser, to read from same Source of Truth that Generator CLI utilizes, at runtime'
153- run : echo PARSER="./scripts/parse_version.py" >> $GITHUB_ENV
154-
155- # Note: one Sem Ver is maintained in src/**/__init__.py file
156- # and the other in the pyproject.toml file
157- - name : ' Parse Sem Ver, same as `generate-python --version` value returned, at runtime'
158- run : echo VERSION_FROM_DISTRO_SOURCE_PY_FILE="$(${{ "{{" }} env.PARSER {{ "}}" }})" >> $GITHUB_ENV
159-
160- # PEP 440 requires that the version string be normalized to a canonical form.
161- # below should be enough to handle cases: '1.7.4', '1.7.4-rc', and '1.7.4-rc.1'
162- - name : ' Transform Version (ie 1.7.4-rc.1 -> 1.7.4rc1), to match the name of the wheel produced'
163- run : echo WHEEL_VERSION="$(echo $VERSION_FROM_DISTRO_SOURCE_PY_FILE | sed -E 's/([^.]*)\.([^.]*)\.([^-]*)-(rc)\.?(.*)/\1.\2.\3\4\5/')" >> $GITHUB_ENV
164-
165- - name : " If Sem Ver ends with '-rc', append trailing 0 (ie *rc0)"
166- id : extract_sem_ver_last_two_chars
167- run : ' echo last_two="${${{ "{{" }} env.WHEEL_VERSION {{ "}}" }}: -2}" >> $GITHUB_OUTPUT'
168-
169- - name : " Sem Ver ends with 'rc' = ${{ " {{" }} steps.extract_sem_ver_last_two_chars.outputs.last_two == 'rc' {{ "}}" }}"
170- if : ${{ "{{" }} steps.extract_sem_ver_last_two_chars.outputs.last_two == 'rc' {{ "}}" }}
171- run : echo WHEEL_VERSION="${WHEEL_VERSION}0" >> $GITHUB_ENV
172-
173- - name : ' Set Expected PEP 440 Version: ${{ "{{" }} env.WHEEL_VERSION {{ "}}" }}'
174- id : set_expected_pep_440_version
175- run : echo "EXPECTED_PEP_440_VERSION=${{ "{{" }} env.WHEEL_VERSION {{ "}}" }}" >> $GITHUB_OUTPUT
176-
177- # #### TEST SUITE / UNIT TESTS #####
178- # Before Test Suite, must derive expected PEP 440 Sem Ver
179- - name : Run Unit Tests
180- run : tox -vv -s false
153+ # ##### TEST SUITE RUN against Edit and Sdist ######
154+ - name : Build and Test 'Edit' and 'Sdist' & Build Wheel(s)
155+ run : |
156+ set -o pipefail
157+ tox -vv -s false | tee test_output.log
181158 env :
182159 PLATFORM : ${{ "{{" }} matrix.platform {{ "}}" }}
183- PKG_VERSION : ${{ "{{" }} steps.set_expected_pep_440_version.outputs.EXPECTED_PEP_440_VERSION {{ "}}" }}
160+ BUILD_DEST : ${{ "{{" }} env.WHEELS_PIP_DIR {{ "}}" }}
161+
162+ - name : List Wheel(s) created for Distro and its Requirements
163+ run : ls -l ${{ "{{" }} env.WHEELS_PIP_DIR {{ "}}" }}
164+
165+ # ## PARSE WHEEL File NAME ###
166+ - name : Extract Wheel Name and Size
167+ id : extract_wheel_info
168+ shell : bash
169+ run : |
170+ WHEEL_INFO=$(grep -E "Created wheel for" test_output.log | sed -E "s/.*filename=([^ ]+) size=([^ ]+) .*/\1 \2/")
171+
172+ # extract file name
173+ WHEEL_NAME=$(echo $WHEEL_INFO | cut -d ' ' -f 1)
174+ echo "WHEEL_NAME=$WHEEL_NAME" >> $GITHUB_ENV
175+
176+ # extract file size
177+ WHEEL_SIZE=$(echo $WHEEL_INFO | cut -d ' ' -f 2)
178+ echo "WHEEL_SIZE=$WHEEL_SIZE" >> $GITHUB_ENV
184179
180+ # extract '1.12.5.dev0' from '{{ cookiecutter.pkg_name }}-1.12.5.dev0-py3-none-any.whl'
181+ PEP_VERSION=$(echo $WHEEL_NAME | sed -E "s/{{ cookiecutter.pkg_name }}-([^ ]+)-py3-none-any.whl/\1/")
182+
183+ echo "PEP_VERSION=${PEP_VERSION}" >> $GITHUB_OUTPUT
184+
185+ - run : ' echo "WHEEL_NAME: $WHEEL_NAME SIZE: $WHEEL_SIZE"'
186+ - run : ' echo "PEP_VERSION: $PEP_VERSION"'
187+
188+ # Crash Workflow if PEP_VERSION is not set
189+ - if : ${{ "{{" }} steps.extract_wheel_info.outputs.PEP_VERSION == '' {{ "}}" }}
190+ run : exit 1
191+
192+ # ##### TEST SUITE RUN against Wheel ######
193+ - name : Run Test Suite Against Wheel
194+ run : tox -e wheel-test -s false
195+ env :
196+ PLATFORM : ${{ "{{" }} matrix.platform {{ "}}" }}
197+ BUILD_DEST : ${{ "{{" }} env.WHEELS_PIP_DIR {{ "}}" }}
198+ WHEEL : ${{ "{{" }} env.WHEEL_NAME {{ "}}" }}
199+
200+ # # Combine Coverage Data from Tests' Results ##
185201 - name : " Combine Coverage (dev, sdist, wheel) & make Reports"
186202 run : tox -e coverage --sitepackages -vv -s false
187203
188204 - name : Rename Coverage Files
189- run : mv ./.tox/coverage.xml ./coverage-${{ "{{" }} matrix.platform {{ "}}" }}-${{ "{{" }} matrix.python-version {{ "}}" }}.xml
205+ shell : bash
206+ run : |
207+ mv ./.tox/coverage.xml ./coverage-${{ "{{" }} matrix.platform {{ "}}" }}-${{ "{{" }} matrix.python-version {{ "}}" }}.xml
190208
209+ # # UPLOAD CI ARTIFACTS - Coverage Reports ##
191210 - name : " Upload Test Coverage as Artifacts"
192211 uses : actions/upload-artifact@v3
193212 with :
@@ -196,25 +215,27 @@ jobs:
196215 if-no-files-found : error
197216
198217 - name : Check for compliance with Python Best Practices
218+ shell : bash
199219 env :
200- PKG_VERSION : ${{ "{{" }} steps.set_expected_pep_440_version.outputs.EXPECTED_PEP_440_VERSION {{ "}}" }}
220+ PKG_VERSION : ${{ "{{" }} steps.extract_wheel_info.outputs.PEP_VERSION {{ "}}" }}
221+ WHEEL_PATH : ${{ "{{" }} env.WHEELS_PIP_DIR {{ "}}" }}/${{ "{{" }} env.WHEEL_NAME {{ "}}" }}
201222 run : |
202223 DIST_DIR=dist
203- echo "DIST_DIR=dist " >> $GITHUB_ENV
224+ echo "DIST_DIR=${DIST_DIR} " >> $GITHUB_ENV
204225 mkdir ${DIST_DIR}
205226 mv ".tox/${DIST_DIR}/{{ cookiecutter.pkg_name }}-${PKG_VERSION}.tar.gz" "${DIST_DIR}"
206- mv ".tox/${DIST_DIR}/{{ cookiecutter.pkg_name }}-${PKG_VERSION}-py3-none-any.whl " "${DIST_DIR}"
227+ mv "${{ "{{" }} env.WHEEL_PATH {{ "}}" }} " "${DIST_DIR}"
207228 tox -e check -vv -s false
208229
230+ # # UPLOAD CI ARTIFACTS - Distro Build(s), 1 sdist and 1 or more wheels ##
209231 - name : Upload Source & Wheel distributions as Artefacts
210232 uses : actions/upload-artifact@v3
211233 with :
212234 name : dist-${{ "{{" }} matrix.platform {{ "}}" }}-${{ "{{" }} matrix.python-version {{ "}}" }}
213235 path : ${{ "{{" }} env.DIST_DIR {{ "}}" }}
214236 if-no-files-found : error
215237 outputs :
216- EXPECTED_PEP_440_VERSION : ${{ "{{" }} steps.set_expected_pep_440_version.outputs.EXPECTED_PEP_440_VERSION {{ "}}" }}
217-
238+ PEP_VERSION : ${{ "{{" }} steps.extract_wheel_info.outputs.PEP_VERSION {{ "}}" }}
218239
219240 codecov_coverage_host :
220241 runs-on : ubuntu-latest
@@ -302,7 +323,7 @@ jobs:
302323 name : ${{ "{{" }} needs.check_which_git_branch_we_are_on.outputs.ENVIRONMENT_NAME {{ "}}" }}
303324 env :
304325 DIST_DIR : dist
305- PACKAGE_DIST_VERSION : ${{ "{{" }} needs.test_suite.outputs.EXPECTED_PEP_440_VERSION {{ "}}" }}
326+ PACKAGE_DIST_VERSION : ${{ "{{" }} needs.test_suite.outputs.PEP_VERSION {{ "}}" }}
306327 TWINE_USERNAME : ${{ "{{" }} secrets.TWINE_USERNAME {{ "}}" }}
307328 TWINE_PASSWORD : ${{ "{{" }} secrets.TWINE_PASSWORD {{ "}}" }}
308329 PYPI_SERVER : ${{ "{{" }} vars.PYPI_SERVER {{ "}}" }}
@@ -369,10 +390,11 @@ jobs:
369390 docs :
370391 name : Build Documentation
371392 needs : set_github_outputs
372- uses : ./ .github/workflows/policy_docs.yml
393+ uses : boromir674/automated-workflows/ .github/workflows/policy_docs.yml@v1.3.0
373394 with :
374395 run_policy : ${{ "{{" }} needs.set_github_outputs.outputs.PIPE_DOCS_POLICY {{ "}}" }}
375396 python_version : ${{ "{{" }} needs.set_github_outputs.outputs.PIPE_DOCS_PY {{ "}}" }}
397+ command : ' tox -s false -e pin-deps -- -E docs && tox -e docs --sitepackages -vv -s false'
376398
377399# ## DRAW PYTHON DEPENDENCY GRAPHS ###
378400 code_visualization :
0 commit comments