name: gh on: create: # is used for publishing to PyPI and TestPyPI tags: # any tag regardless of its name, no branches push: # only publishes pushes to the main branch to TestPyPI branches: # any branch but not tag - >- ** tags-ignore: - >- ** pull_request: schedule: - cron: 1 0 * * * # Run daily at 0:01 UTC # Run every Friday at 18:02 UTC # https://crontab.guru/#2_18_*_*_5 # - cron: 2 18 * * 5 jobs: linters: name: >- ${{ matrix.env.TOXENV }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: python-version: - 3.8 os: - ubuntu-latest env: - TOXENV: lint - TOXENV: docs - TOXENV: build-dists,metadata-validation env: TOX_PARALLEL_NO_SPINNER: 1 steps: - uses: actions/checkout@master - name: Set up Python ${{ matrix.python-version }} uses: actions/setup-python@v1 with: python-version: ${{ matrix.python-version }} - name: set PY_SHA256 run: echo "::set-env name=PY_SHA256::$(python -VV | sha256sum | cut -d' ' -f1)" - name: Pre-commit cache uses: actions/cache@v1 with: path: ~/.cache/pre-commit key: ${{ runner.os }}-pre-commit-${{ env.PY_SHA256 }}-${{ hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ hashFiles('pytest.ini') }} - name: Pip cache uses: actions/cache@v1 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ env.PY_SHA256 }}-${{ hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ hashFiles('pytest.ini') }} restore-keys: | ${{ runner.os }}-pip- ${{ runner.os }}- - name: Install tox run: | python -m pip install --upgrade tox - name: Log installed dists run: >- python -m pip freeze --all - name: >- Initialize tox envs run: >- python -m tox --parallel auto --parallel-live --notest --skip-missing-interpreters false -vv env: ${{ matrix.env }} - name: Test with tox run: | python -m tox --parallel auto --parallel-live env: ${{ matrix.env }} - name: Archive logs uses: actions/upload-artifact@v2 with: name: logs.zip path: .tox/**/log/ unit: name: >- py${{ matrix.python-version }}@${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: # fail-fast: false # max-parallel: 5 # The matrix testing goal is to cover the *most likely* environments # which are expected to be used by users in production. Avoid adding a # combination unless there are good reasons to test it, like having # proof that we failed to catch a bug by not running it. Using # distribution should be prefferred instead of custom builds. matrix: python-version: # keep list sorted as it determines UI order too - 3.6 - 3.7 - 3.8 # NOTE: Installing ansible under 3.10-dev is currently not # NOTE: possible because compiling cffi explodes. os: # https://help.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners - ubuntu-latest # 18.04 # - windows-latest # - windows-2016 include: - os: ubuntu-20.04 python-version: 3.9-dev - os: macOS-latest python-version: 3.6 - os: macOS-latest python-version: 3.8 env: TOX_PARALLEL_NO_SPINNER: 1 steps: - uses: actions/checkout@master - name: Get history and tags for SCM versioning to work run: | git fetch --prune --unshallow git fetch --depth=1 origin +refs/tags/*:refs/tags/* - name: Set up stock Python ${{ matrix.python-version }} from GitHub if: >- !endsWith(matrix.python-version, '-dev') uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Set up Python ${{ matrix.python-version }} from deadsnakes if: >- endsWith(matrix.python-version, '-dev') uses: deadsnakes/action@v1.0.0 with: python-version: ${{ matrix.python-version }} - name: >- Log the currently selected Python version info (${{ matrix.python-version }}) run: | python --version --version which python - name: Pip cache uses: actions/cache@v1 with: path: ~/.cache/pip key: ${{ runner.os }}-pip-${{ env.PY_SHA256 }}-${{ hashFiles('setup.cfg') }}-${{ hashFiles('tox.ini') }}-${{ hashFiles('pyproject.toml') }}-${{ hashFiles('.pre-commit-config.yaml') }}-${{ hashFiles('pytest.ini') }} restore-keys: | ${{ runner.os }}-pip- ${{ runner.os }}- - name: Install tox run: | python -m pip install --upgrade tox - name: Log installed dists run: >- python -m pip freeze --all - name: >- Initialize tox envs run: >- python -m tox --parallel auto --parallel-live --notest --skip-missing-interpreters false -vv env: TOXENV: ansible28,ansible29,ansible210,ansibledevel - name: "Test with tox: ansible28" run: | python -m tox env: TOXENV: ansible28 # sequential run improves browsing experience (almost no speed impact) - name: "Test with tox: ansible29" run: | python -m tox env: TOXENV: ansible29 - name: "Test with tox: ansible210" run: | python -m tox env: TOXENV: ansible210 - name: "Test with tox: ansibledevel" run: | python -m tox env: TOXENV: ansibledevel - name: Archive logs uses: actions/upload-artifact@v2 with: name: logs.zip path: .tox/**/log/ # https://github.com/actions/upload-artifact/issues/123 continue-on-error: true - name: Report junit failures uses: shyim/junit-report-annotations-action@3d2e5374f2b13e70f6f3209a21adfdbc42c466ae with: path: .tox/junit.*.xml if: always() publish: name: Publish to PyPI registry needs: - linters - unit runs-on: ubuntu-latest env: PY_COLORS: 1 TOXENV: build-dists,metadata-validation TOX_PARALLEL_NO_SPINNER: 1 steps: - name: Switch to using Python 3.8 by default uses: actions/setup-python@v2 with: python-version: 3.8 - name: Install tox run: >- python -m pip install --user tox - name: Check out src from Git uses: actions/checkout@v2 with: # Get shallow Git history (default) for tag creation events # but have a complete clone for any other workflows. # Both options fetch tags but since we're going to remove # one from HEAD in non-create-tag workflows, we need full # history for them. fetch-depth: >- ${{ ( github.event_name == 'create' && github.event.ref_type == 'tag' ) && 1 || 0 }} - name: Drop Git tags from HEAD for non-tag-create events if: >- github.event_name != 'create' || github.event.ref_type != 'tag' run: >- git tag --points-at HEAD | xargs git tag --delete - name: Instruct setuptools-scm not to add a local version part if: >- github.event_name == 'push' && github.ref == format( 'refs/heads/{0}', github.event.repository.default_branch ) run: | echo 'local_scheme = "no-local-version"' >> pyproject.toml git update-index --assume-unchanged pyproject.toml - name: Pre-populate tox env run: >- python -m tox --parallel auto --parallel-live --notest --skip-missing-interpreters false -vvvv - name: Build dists run: python -m tox -p auto --parallel-live -vvvv - name: Publish to test.pypi.org if: >- ( github.event_name == 'push' && github.ref == format( 'refs/heads/{0}', github.event.repository.default_branch ) ) || ( github.event_name == 'create' && github.event.ref_type == 'tag' ) uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.testpypi_password }} repository_url: https://test.pypi.org/legacy/ - name: Publish to pypi.org if: >- # "create" workflows run separately from "push" & "pull_request" github.event_name == 'create' && github.event.ref_type == 'tag' uses: pypa/gh-action-pypi-publish@master with: password: ${{ secrets.pypi_password }}