Skip to content

Commit

Permalink
add safe-to-test workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
abikouo committed Jul 7, 2023
1 parent ca3060c commit 5903529
Showing 1 changed file with 52 additions and 36 deletions.
88 changes: 52 additions & 36 deletions .github/workflows/integration.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -8,49 +8,83 @@ on:
pull_request_target:

env:
AMAZON_PATH: "./amazon"
COMMUNITY_PATH: "./community"
integration_jobs: 22

jobs:
safe-to-test:
if: ${{ github.event.label.name == 'safe to test' }} || ${{ github.event.action != 'labeled' }}
uses: abikouo/github_actions/.github/workflows/safe-to-test.yml@safe_to_test_v2
splitter:
runs-on: ubuntu-latest
needs:
- safe-to-test
env:
amazon_dir: "./amazon"
community_dir: "./community"
outputs:
test_targets: ${{ steps.display.outputs.test_targets }}
steps:
- name: Checkout repository
uses: ansible-network/github_actions/.github/actions/checkout_dependency@main
with:
path: ${{ env.COMMUNITY_PATH }}
path: ${{ env.community_dir }}
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: "0"

- name: Checkout dependency (amazon.aws)
uses: ansible-network/github_actions/.github/actions/checkout_dependency@main
with:
repository: ansible-collections/amazon.aws
path: ${{ env.AMAZON_PATH }}
path: ${{ env.amazon_dir }}
ref: ${{ github.event.pull_request.base.ref }}
fetch-depth: "0"

- name: list changes for pull request
id: splitter
uses: ansible-network/github_actions/.github/actions/ansible_test_splitter@main
with:
total_jobs: 22
total_jobs: ${{ integration_jobs }}
collections_to_test: |
${{ env.AMAZON_PATH }}
${{ env.COMMUNITY_PATH }}
${{ env.community_dir }}
${{ env.amazon_dir }}
- name: display targets
id: display
run: echo "test_targets=${{ steps.splitter.outputs.test_targets }}" >> $GITHUB_OUTPUT
shell: bash
integration:
build_jobs:
runs-on: ubuntu-latest
if: ${{ needs.splitter.outputs.test_targets != '' }}
needs:
- splitter
env:
outputs:
test_matrix: ${{ steps.compute-matrix.outputs.test_matrix }}
test_targets: ${{ needs.splitter.outputs.test_targets }}
if: ${{ contains(github.event.pull_request.labels.*.name, 'run-integration-beta') }}
steps:
- name: Compute matrix
id: compute-matrix
run: |
import os, json
ids=[
item.split(":", maxsplit=1)[0].split('-', maxsplit=1)[1]
for item in os.environ.get('TEST_TARGETS').split(';') if item.split(':', maxsplit=1)[1]
]
output_path = os.environ.get('GITHUB_OUTPUT')
with open(output_path, "a", encoding="utf-8") as fw:
fw.write(f'job_ids={json.dumps(ids)}\n')
shell: python
env:
TEST_TARGETS: ${{ needs.splitter.outputs.test_targets }}
integration:
needs:
- build_jobs
env:
test_targets: ${{ needs.build_jobs.outputs.test_targets }}
amazon_dir: "./amazon"
community_dir: "./community"
if: >-
contains(github.event.pull_request.labels.*.name, 'run-integration-beta') &&
needs.build_jobs.outputs.test_matrix != ''
runs-on: ubuntu-latest
strategy:
fail-fast: false
Expand All @@ -62,7 +96,7 @@ jobs:
collection:
- amazon.aws
- community.aws
workflow-id: ['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '20', '21', '22']
workflow-id: ${{ fromJson(needs.build_jobs.outputs.job_ids) }}
name: "integration-${{ matrix.collection }}-py${{ matrix.python-version }}-${{ matrix.ansible-version }}-${{ matrix.workflow-id }}"
steps:
- name: Read ansible-test targets
Expand All @@ -76,80 +110,64 @@ jobs:

- name: Install ansible-core (${{ matrix.ansible-version }})
run: python3 -m pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible-version }}.tar.gz --disable-pip-version-check
if: steps.read-targets.outputs.ansible_test_targets != ''

# install community.aws collection
- name: Checkout the collection repository
uses: ansible-network/github_actions/.github/actions/checkout_dependency@main
with:
path: ${{ env.COMMUNITY_PATH }}
path: ${{ env.community_dir }}
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: "0"
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Pre install collections dependencies first so the collection install does not
run: ansible-galaxy collection install --pre true -p /home/runner/collections/
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Read collection metadata from galaxy.yml
id: identify
uses: ansible-network/github_actions/.github/actions/identify_collection@main
with:
source_path: ${{ env.COMMUNITY_PATH }}
if: steps.read-targets.outputs.ansible_test_targets != ''
source_path: ${{ env.community_dir }}

- name: Build and install the collection
uses: ansible-network/github_actions/.github/actions/build_install_collection@main
with:
install_python_dependencies: true
source_path: ${{ env.COMMUNITY_PATH }}
source_path: ${{ env.community_dir }}
collection_path: ${{ steps.identify.outputs.collection_path }}
tar_file: ${{ steps.identify.outputs.tar_file }}
ansible_version: ${{ matrix.ansible-version }}
if: steps.read-targets.outputs.ansible_test_targets != ''

# install amazon.aws collection
- name: Checkout the collection repository
uses: ansible-network/github_actions/.github/actions/checkout_dependency@main
with:
repository: ansible-collections/amazon.aws
path: ${{ env.AMAZON_PATH }}
path: ${{ env.amazon_dir }}
ref: ${{ github.event.pull_request.base.ref }}
fetch-depth: "0"
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v4
with:
python-version: ${{ matrix.python-version }}
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Pre install collections dependencies first so the collection install does not
run: ansible-galaxy collection install --pre true -p /home/runner/collections/
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Read collection metadata from galaxy.yml
id: identify
uses: ansible-network/github_actions/.github/actions/identify_collection@main
with:
source_path: ${{ env.AMAZON_PATH }}
if: steps.read-targets.outputs.ansible_test_targets != ''
source_path: ${{ env.amazon_dir }}

- name: Build and install the collection
uses: ansible-network/github_actions/.github/actions/build_install_collection@main
with:
install_python_dependencies: true
source_path: ${{ env.AMAZON_PATH }}
source_path: ${{ env.amazon_dir }}
collection_path: ${{ steps.identify.outputs.collection_path }}
tar_file: ${{ steps.identify.outputs.tar_file }}
ansible_version: ${{ matrix.ansible-version }}
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Determines path to the collection being tested
id: collection-path
Expand All @@ -163,14 +181,12 @@ jobs:
COLLECTION_TO_TEST: ${{ matrix.collection }}
AMAZON_COLLECTION_PATH: ${{ steps.install-amazon.outputs.collection_path }}
COMMUNITY_COLLECTION_PATH: ${{ steps.install-community.outputs.collection_path }}
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Create AWS/sts session credentials
uses: ansible-network/github_actions/.github/actions/ansible_aws_test_provider@main
with:
collection_path: ${{ steps.collection-path.outputs.path }}
ansible_core_ci_key: ${{ secrets.ANSIBLE_CORE_CI_KEY }}
if: steps.read-targets.outputs.ansible_test_targets != ''

- name: Run integration tests
uses: ansible-network/github_actions/.github/actions/ansible_test_integration@main
Expand All @@ -183,4 +199,4 @@ jobs:
test-requirements.txt
tests/integration/requirements.txt
ansible_test_constraint_files: tests/integration/constraints.txt
if: steps.read-targets.outputs.ansible_test_targets != ''
ansible_test_targets: ${{ steps.read-targets.outputs.ansible_test_targets }}

0 comments on commit 5903529

Please sign in to comment.