Add handling of .skip_lint
file(s)
#215
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
on: [push, pull_request] | |
name: 'Test action for workflows' | |
env: | |
GALAXY_FORK: galaxyproject | |
GALAXY_BRANCH: master | |
MAX_CHUNKS: 4 | |
jobs: | |
setup-pr-workflows: | |
name: Setup as in PR for workflows | |
runs-on: ubuntu-latest | |
outputs: | |
galaxy-head-sha: ${{ steps.get-galaxy-sha.outputs.galaxy-head-sha }} | |
repository-list: ${{ steps.discover.outputs.repository-list }} | |
tool-list: ${{ steps.discover.outputs.tool-list }} | |
chunk-count: ${{ steps.discover.outputs.chunk-count }} | |
chunk-list: ${{ steps.discover.outputs.chunk-list }} | |
strategy: | |
matrix: | |
python-version: [3.11] | |
steps: | |
- name: Print github context properties | |
run: | | |
echo 'event: ${{ github.event_name }}' | |
echo 'sha: ${{ github.sha }}' | |
echo 'ref: ${{ github.ref }}' | |
echo 'head_ref: ${{ github.head_ref }}' | |
echo 'base_ref: ${{ github.base_ref }}' | |
echo 'event.before: ${{ github.event.before }}' | |
echo 'event.after: ${{ github.event.after }}' | |
- name: Determine latest commit in the Galaxy repo | |
id: get-galaxy-sha | |
run: echo "galaxy-head-sha=$(git ls-remote https://github.com/${{ env.GALAXY_FORK }}/galaxy refs/heads/${{ env.GALAXY_BRANCH }} | cut -f1)" >> $GITHUB_OUTPUT | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache .cache/pip | |
uses: actions/cache@v3 | |
id: cache-pip | |
with: | |
path: ~/.cache/pip | |
key: pip_cache_py_${{ matrix.python-version }}_gxy_${{ steps.get-galaxy-sha.outputs.galaxy-head-sha }} | |
- name: Cache .planemo | |
uses: actions/cache@v3 | |
id: cache-planemo | |
with: | |
path: ~/.planemo | |
key: planemo_cache_py_${{ matrix.python-version }}_gxy_${{ steps.get-galaxy-sha.outputs.galaxy-head-sha }} | |
# Install the `wheel` package so that when installing other packages which | |
# are not available as wheels, pip will build a wheel for them, which can be cached. | |
- name: Install wheel | |
run: pip install wheel | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
- name: Introduce a change on a test workflow | |
run: | | |
git config --global user.name "Arthur Dent" | |
git config --global user.email "[email protected]" | |
echo "" >> test/workflows/example3/tutorial.ga | |
git commit -m bump test/workflows/example3/tutorial.ga | |
- name: Fake a Planemo run to update cache and determine commit range, repositories, and chunks | |
uses: ./ | |
id: discover | |
with: | |
workflows: true | |
create-cache: ${{ steps.cache-pip.outputs.cache-hit != 'true' || steps.cache-planemo.outputs.cache-hit != 'true' }} | |
galaxy-fork: ${{ env.GALAXY_FORK }} | |
galaxy-branch: ${{ env.GALAXY_BRANCH }} | |
max-chunks: ${{ env.MAX_CHUNKS }} | |
python-version: ${{ matrix.python-version }} | |
- name: Check commit range | |
run: if ! grep "\.\." <<<$(echo ${{ steps.discover.outputs.commit-range }}); then echo "wrong commit range"; exit 1; fi | |
- name: Check content of repository list | |
run: | | |
if ! grep -q "example3" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "example3 must be in repo list"; exit 1; fi | |
if grep -q "example4" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "example4 must not be in repo list"; exit 1; fi | |
- name: Check content of tool list | |
run: if [ -n "${{ steps.discover.outputs.tool-list }}" ]; then echo "tool list must be empty"; exit 1; fi | |
- name: Check number of chunks | |
run: if [ "${{ steps.discover.outputs.chunk-count }}" != "1" ]; then echo "wrong chunk-count"; fi | |
setup-ci-workflows: | |
name: Setup as in CI for workflows | |
runs-on: ubuntu-latest | |
outputs: | |
galaxy-head-sha: ${{ steps.get-galaxy-sha.outputs.galaxy-head-sha }} | |
fork: ${{ steps.get-fork-branch.outputs.fork }} | |
branch: ${{ steps.get-fork-branch.outputs.branch }} | |
repository-list: ${{ steps.discover.outputs.repository-list }} | |
chunk-count: ${{ steps.discover.outputs.chunk-count }} | |
chunk-list: ${{ steps.discover.outputs.chunk-list }} | |
strategy: | |
matrix: | |
python-version: [3.11] | |
steps: | |
- name: Determine latest commit in the Galaxy repo | |
id: get-galaxy-sha | |
run: echo "galaxy-head-sha=$(git ls-remote https://github.com/${{ env.GALAXY_FORK }}/galaxy refs/heads/${{ env.GALAXY_BRANCH }} | cut -f1)" >> $GITHUB_OUTPUT | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache .cache/pip | |
uses: actions/cache@v3 | |
id: cache-pip | |
with: | |
path: ~/.cache/pip | |
key: pip_cache_py_${{ matrix.python-version }}_gxy_${{ steps.get-galaxy-sha.outputs.galaxy-head-sha }} | |
# Install the `wheel` package so that when installing other packages which | |
# are not available as wheels, pip will build a wheel for them, which can be cached. | |
- name: Install wheel | |
run: pip install wheel | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- name: Artificially exclude tools (because ci_find_repos discovers tool and workflow repos) | |
run: echo 'test/tools/' > .tt_skip | |
- name: Fake a Planemo run to update cache and determine commit range, repositories, and chunks | |
uses: ./ | |
id: discover | |
env: | |
GITHUB_EVENT_NAME: schedule | |
with: | |
workflows: true | |
create-cache: true | |
galaxy-fork: ${{ env.GALAXY_FORK }} | |
galaxy-branch: ${{ env.GALAXY_BRANCH }} | |
max-chunks: ${{ env.MAX_CHUNKS }} | |
python-version: ${{ matrix.python-version }} | |
github-event-name-override: 'schedule' | |
- name: Check for empty commit range | |
run: if [ -n "${{ steps.discover.outputs.commit-range }}" ]; then exit 1; fi | |
# note: ci_find_repos will find all tools and workflows | |
- name: Check that all tools an workflows are in the repository list | |
run: | | |
if grep -q "tool1" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "tool1 must not be in the repo list"; exit 1; fi | |
if grep -q "tool2" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "tool2 must not be in the repo list"; exit 1; fi | |
if ! grep -q "example3" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "example3 must be in the repo list"; exit 1; fi | |
if ! grep -q "example4" <<<$(echo "${{ steps.discover.outputs.repository-list }}"); then echo "example4 must be in the repo list"; exit 1; fi | |
# note: ci_find_tools will find only tools, i.e. it should be empty here | |
- name: Check that all tools are in the tool list | |
run: if [ -n "${{ steps.discover.outputs.tool-list }}" ]; then exit 1; fi | |
# chunk-count will only consider tools/workflows depending on the workflow input to the action | |
- name: Check that the number of chunks is two, i.e. the number of tools | |
run: if [ "${{ steps.discover.outputs.chunk-count }}" != "2" ]; then exit 1; fi | |
lint: | |
name: Test linting of workflows | |
needs: [setup-ci-workflows] | |
runs-on: ubuntu-latest | |
strategy: | |
matrix: | |
python-version: [3.11] | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache .cache/pip | |
uses: actions/cache@v3 | |
id: cache-pip | |
with: | |
path: ~/.cache/pip | |
key: pip_cache_py_${{ matrix.python-version }}_gxy_${{ needs.setup-ci-workflows.outputs.galaxy-head-sha }} | |
- name: Install wheel | |
run: pip install wheel | |
- name: Planemo lint workflows | |
uses: ./ | |
with: | |
mode: lint | |
workflows: true | |
repository-list: "${{ needs.setup-ci-workflows.outputs.repository-list }}" | |
tool-list: "${{ needs.setup-ci-workflows.outputs.tool-list }}" | |
test-workflows: | |
name: Test testing of workflows | |
needs: [setup-ci-workflows] | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
chunk: ${{ fromJson(needs.setup-ci-workflows.outputs.chunk-list) }} | |
python-version: [3.11] | |
services: | |
postgres: | |
image: postgres:11 | |
env: | |
POSTGRES_USER: postgres | |
POSTGRES_PASSWORD: postgres | |
POSTGRES_DB: postgres | |
ports: | |
- 5432:5432 | |
steps: | |
# checkout the repository | |
# and use it as the current working directory | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache .cache/pip | |
uses: actions/cache@v3 | |
id: cache-pip | |
with: | |
path: ~/.cache/pip | |
key: pip_cache_py_${{ matrix.python-version }}_gxy_${{ needs.setup-ci-workflows.outputs.galaxy-head-sha }} | |
- name: Planemo test workflows | |
uses: ./ | |
id: test-workflows | |
with: | |
mode: test | |
workflows: true | |
setup-cvmfs: true | |
repository-list: ${{ needs.setup-ci-workflows.outputs.repository-list }} | |
galaxy-fork: ${{ env.GALAXY_FORK }} | |
galaxy-branch: ${{ env.GALAXY_BRANCH }} | |
chunk: ${{ matrix.chunk }} | |
chunk-count: ${{ needs.setup-ci-workflows.outputs.chunk-count }} | |
- name: 2nd run test workflows | |
uses: ./ | |
id: test-workflows-2 | |
with: | |
mode: test | |
workflows: true | |
setup-cvmfs: false | |
repository-list: ${{ needs.setup-ci-workflows.outputs.repository-list }} | |
galaxy-fork: ${{ env.GALAXY_FORK }} | |
galaxy-branch: ${{ env.GALAXY_BRANCH }} | |
chunk: ${{ matrix.chunk }} | |
chunk-count: ${{ needs.setup-ci-workflows.outputs.chunk-count }} | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: 'Workflow test output ${{ matrix.chunk }}' | |
path: upload | |
combine_outputs: | |
name: Test combining 'chunked' test results | |
needs: [setup-ci-workflows, test-workflows] | |
strategy: | |
matrix: | |
python-version: [3.11] | |
# This job runs on Linux | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 1 | |
- uses: actions/download-artifact@v3 | |
with: | |
path: artifacts | |
- uses: actions/setup-python@v4 | |
with: | |
python-version: ${{ matrix.python-version }} | |
- name: Cache .cache/pip | |
uses: actions/cache@v3 | |
id: cache-pip | |
with: | |
path: ~/.cache/pip | |
key: pip_cache_py_${{ matrix.python-version }}_gxy_${{ needs.setup-ci-tools.outputs.galaxy-head-sha }} | |
- name: Combine outputs | |
uses: ./ | |
id: combine | |
with: | |
mode: combine | |
html-report: true | |
- name: Check statistics | |
run: if ! grep -q "4\s\+success" <<<$(echo ${{ steps.combine.outputs.statistics }}); then echo "wrong statistics"; exit 1; fi | |
- uses: actions/upload-artifact@v3 | |
with: | |
name: 'All tool test results' | |
path: upload | |
- name: Check outputs | |
uses: ./ | |
id: check | |
with: | |
mode: check |