DNM - Trigger integration with safe-to-test #4
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: integration | |
concurrency: | |
group: community-aws-integration-${{ github.sha }} | |
cancel-in-progress: true | |
on: | |
pull_request_target: | |
env: | |
AWS_INTEGRATION_TOTAL_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_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_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: ${{ env.AWS_INTEGRATION_TOTAL_JOBS }} | |
collections_to_test: | | |
${{ env.community_dir }} | |
${{ env.amazon_dir }} | |
- name: display targets | |
id: display | |
run: echo "test_targets=${{ steps.splitter.outputs.test_targets }}" >> $GITHUB_OUTPUT | |
shell: bash | |
build_jobs: | |
runs-on: ubuntu-latest | |
if: ${{ needs.splitter.outputs.test_targets != '' }} | |
needs: | |
- splitter | |
outputs: | |
test_matrix: ${{ steps.compute-matrix.outputs.test_matrix }} | |
test_targets: ${{ needs.splitter.outputs.test_targets }} | |
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 | |
matrix: | |
ansible-version: | |
- milestone | |
python-version: | |
- "3.9" | |
collection: | |
- amazon.aws | |
- community.aws | |
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 | |
id: read-targets | |
run: | | |
python -c "import os; splitter_d={x.split(':', maxsplit=1)[0]:x.split(':', maxsplit=1)[1] for x in os.environ.get('TEST_TARGETS').split(';')}; context=os.environ.get('TEST_CONTEXT'); result=splitter_d.get(context); result and print(f'ansible_test_targets={result}')" >> $GITHUB_OUTPUT | |
shell: bash | |
env: | |
TEST_CONTEXT: "${{ matrix.collection }}-${{ matrix.workflow-id }}" | |
TEST_TARGETS: "${{ env.test_targets }}" | |
- 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 | |
# install community.aws collection | |
- name: Checkout the collection repository | |
uses: ansible-network/github_actions/.github/actions/checkout_dependency@main | |
with: | |
path: ${{ env.community_dir }} | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: "0" | |
- name: Set up Python ${{ matrix.python-version }} | |
uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Pre install collections dependencies first so the collection install does not | |
run: ansible-galaxy collection install --pre true -p /home/runner/collections/ | |
- name: Read collection metadata from galaxy.yml | |
id: identify-community | |
uses: ansible-network/github_actions/.github/actions/identify_collection@main | |
with: | |
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_dir }} | |
collection_path: ${{ steps.identify-community.outputs.collection_path }} | |
tar_file: ${{ steps.identify-community.outputs.tar_file }} | |
ansible_version: ${{ matrix.ansible-version }} | |
# 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_dir }} | |
ref: ${{ github.event.pull_request.base.ref }} | |
fetch-depth: "0" | |
- name: Pre install collections dependencies first so the collection install does not | |
run: ansible-galaxy collection install --pre true -p /home/runner/collections/ | |
- name: Read collection metadata from galaxy.yml | |
id: identify-amazon | |
uses: ansible-network/github_actions/.github/actions/identify_collection@main | |
with: | |
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_dir }} | |
collection_path: ${{ steps.identify-amazon.outputs.collection_path }} | |
tar_file: ${{ steps.identify-amazon.outputs.tar_file }} | |
ansible_version: ${{ matrix.ansible-version }} | |
- name: Determines path to the collection being tested | |
id: collection-path | |
run: | | |
if [ "${COLLECTION_TO_TEST}" == "amazon.aws" ]; then | |
echo "path=${AMAZON_COLLECTION_PATH}" >> $GITHUB_OUTPUT | |
else | |
echo "path=${COMMUNITY_COLLECTION_PATH}" >> $GITHUB_OUTPUT | |
fi | |
env: | |
COLLECTION_TO_TEST: ${{ matrix.collection }} | |
AMAZON_COLLECTION_PATH: ${{ steps.install-amazon.outputs.collection_path }} | |
COMMUNITY_COLLECTION_PATH: ${{ steps.install-community.outputs.collection_path }} | |
- 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 }} | |
- name: Run integration tests | |
uses: ansible-network/github_actions/.github/actions/ansible_test_integration@main | |
with: | |
collection_path: ${{ steps.collection-path.outputs.path }} | |
python_version: ${{ matrix.python-version }} | |
ansible_version: ${{ matrix.ansible-version }} | |
ansible_test_requirement_files: | | |
requirements.txt | |
test-requirements.txt | |
tests/integration/requirements.txt | |
ansible_test_constraint_files: tests/integration/constraints.txt | |
ansible_test_targets: ${{ steps.read-targets.outputs.ansible_test_targets }} |