Skip to content

Commit

Permalink
Merge remote-tracking branch 'felixfontein/change-detection'
Browse files Browse the repository at this point in the history
PR #49
  • Loading branch information
webknjaz committed Dec 3, 2022
2 parents ce3e835 + 5257e71 commit 1c6026e
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 2 deletions.
8 changes: 7 additions & 1 deletion .github/workflows/test-action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ jobs:
- ''
pre-test-cmd:
- ''
pull-request-change-detection:
- ''
target:
- ''
target-python-version:
Expand Down Expand Up @@ -68,8 +70,10 @@ jobs:
testing-type: units
- ansible-core-version: stable-2.13
collection-root: .internal/ansible/ansible_collections/internal/test
collection-src-directory: ./.tmp-action-checkout
# NOTE: A missing `collection-src-directory` input causes
# NOTE: fetching the repo from GitHub.
origin-python-version: '3.9'
pull-request-change-detection: 'true'
testing-type: integration
- ansible-core-version: stable-2.13
collection-root: .internal/ansible/ansible_collections/internal/test
Expand Down Expand Up @@ -111,6 +115,8 @@ jobs:
git-checkout-ref: ${{ matrix.git-checkout-ref }}
origin-python-version: ${{ matrix.origin-python-version }}
pre-test-cmd: ${{ matrix.pre-test-cmd }}
pull-request-change-detection: >-
${{ matrix.pull-request-change-detection || 'false' }}
target: ${{ matrix.target }}
target-python-version: ${{ matrix.target-python-version }}
testing-type: ${{ matrix.testing-type }}
Expand Down
12 changes: 12 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,18 @@ version supported by the given `ansible-core-version` **(DEFAULT: `auto`)**
Extra command to invoke before ansible-test **(OPTIONAL)**


### `pull-request-change-detection`

Whether to use change detection for pull requests. If set to `true`, will
use change detection to determine changed files against the target branch,
and will not upload code coverage results. If the invocation is not from a
pull request, this option is ignored. Note that this requires
`collection-src-directory` to be empty, or it has to be a git repository
checkout where `collection-src-directory`/`collection-root` ends with
`ansible_collections/{namespace}/{name}`, or it has to be a git
repository checkout where `collection-root` is `.`. **(DEFAULT: `false`)**


### `python-version`

**(DEPRECATED)** Use `origin-python-version` instead.
Expand Down
90 changes: 89 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,17 @@ inputs:
default: auto
pre-test-cmd:
description: Extra command to invoke before ansible-test
pull-request-change-detection:
description: >-
Whether to use change detection for pull requests. If set to `true`, will
use change detection to determine changed files against the target
branch, and will not upload code coverage results. If the invocation is
not from a pull request, this option is ignored. Note that this requires
`collection-src-directory` to be empty, or it has to be a git repository
checkout where `collection-src-directory`/`collection-root` ends with
`ansible_collections/{namespace}/{name}`, or it has to be a git
repository checkout where `collection-root` is `.`.
default: 'false'
python-version:
description: >-
**(DEPRECATED)** Use `origin-python-version` instead. This is only kept
Expand Down Expand Up @@ -191,6 +202,45 @@ runs:
set +x
shell: bash

- name: Log the next step action
run: echo ▷ Figuring out ansible-test flags
shell: bash
- name: Determine ansible-test flags
id: ansible-test-flags
run: |
# Compute whether to use change detection and coverage
import json
import os
import pathlib
import sys
FILE_APPEND_MODE = 'a'
OUTPUTS_FILE_PATH = pathlib.Path(os.environ['GITHUB_OUTPUT'])
def set_output(name, value):
with OUTPUTS_FILE_PATH.open(FILE_APPEND_MODE) as outputs_file:
outputs_file.writelines(f'{name}={value}{os.linesep}')
# Input from GHA
pull_request_change_detection = json.loads('${{
inputs.pull-request-change-detection
}}')
pull_request_branch = '${{ github.event.pull_request.base.ref || '' }}'
# Compute coverage and change detection arguments
coverage_arg = '--coverage'
change_detection_arg = ''
if pull_request_branch and pull_request_change_detection:
coverage_arg = ''
change_detection_arg = (
f'--changed --base-branch {pull_request_branch}'
)
# Set computed coverage-arg and change-detection-arg
set_output('coverage-arg', coverage_arg)
set_output('change-detection-arg', change_detection_arg)
shell: python

- name: Log the next step action
if: >-
!inputs.collection-src-directory
Expand All @@ -205,6 +255,39 @@ runs:
path: .tmp-ansible-collection-checkout
persist-credentials: false
ref: ${{ inputs.git-checkout-ref }}
fetch-depth: >-
${{
steps.ansible-test-flags.outputs.change-detection-arg
&& '0' || '1'
}}
- name: Log the next step action
if: >-
!inputs.collection-src-directory
&& steps.ansible-test-flags.outputs.change-detection-arg
run: >-
echo ▷ Create branches for change detection
shell: bash
- name: Create branches for change detection
if: >-
!inputs.collection-src-directory
&& steps.ansible-test-flags.outputs.change-detection-arg
run: |
# Create a branch for the current HEAD, which happens to be a merge commit
git checkout -b 'pull-request-${{ github.event.pull_request.number }}'
# Name the target branch
git branch '${{
github.event.pull_request.base.ref
}}' --track 'origin/${{
github.event.pull_request.base.ref
}}'
# Show branch information
git branch -vv
shell: bash
working-directory: >-
.tmp-ansible-collection-checkout
- name: Log the next step action
run: >-
Expand Down Expand Up @@ -376,7 +459,8 @@ runs:
;
~/.local/bin/ansible-test ${{ inputs.testing-type }}
-v --color
--coverage
${{ steps.ansible-test-flags.outputs.coverage-arg }}
${{ steps.ansible-test-flags.outputs.change-detection-arg }}
${{
inputs.testing-type == 'sanity'
&& '--junit'
Expand Down Expand Up @@ -426,10 +510,12 @@ runs:
working-directory: ${{ steps.collection-metadata.outputs.checkout-path }}

- name: Log the next step action
if: steps.ansible-test-flags.outputs.coverage-arg != ''
run: >-
echo ▷ Generating a coverage report...
shell: bash
- name: Generate coverage report
if: steps.ansible-test-flags.outputs.coverage-arg != ''
run: >-
set -x
;
Expand All @@ -443,13 +529,15 @@ runs:
working-directory: ${{ steps.collection-metadata.outputs.checkout-path }}

- name: Log the next step action
if: steps.ansible-test-flags.outputs.coverage-arg != ''
run: >-
echo ▷ Sending the coverage data over to
https://codecov.io/gh/${{ github.repository }}...
shell: bash
- name: >-
Send the coverage data over to
https://codecov.io/gh/${{ github.repository }}
if: steps.ansible-test-flags.outputs.coverage-arg != ''
uses: codecov/codecov-action@v3
with:
files: >-
Expand Down

0 comments on commit 1c6026e

Please sign in to comment.