Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow to use ansible-test's change detection for Pull Requests #49

Merged
merged 2 commits into from
Dec 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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 || '' }}'
felixfontein marked this conversation as resolved.
Show resolved Hide resolved

# 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}'
webknjaz marked this conversation as resolved.
Show resolved Hide resolved
)

# 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: >-
webknjaz marked this conversation as resolved.
Show resolved Hide resolved
!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