-
Notifications
You must be signed in to change notification settings - Fork 3.3k
Propose CI infrastructures in github action #1494
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
Merged
Merged
Changes from all commits
Commits
Show all changes
27 commits
Select commit
Hold shift + click to select a range
97f7aab
Use tox configuration
42e1e29
Add init.py to resolve pytest filename collision
bc199f0
Create pr-gate.yml (a new Github worflow)
d1c5c33
tox run-able
8743cd2
Use tox to run CI
25f4c6d
Add flake8 env
68a1ee9
Add spark build
18ca14a
Add report merging step
4ed9109
Fix pipeline
0d9e45a
Add flake8 and ascii flow chart
a71a999
Modify ascii flow chart
44a3c43
Add newline at EOF
5da9d3c
Install pytest-cov extension
b55d17e
Enable flake8 checks (unblocking)
f38d7e0
Fix typo
d385b2f
Try local github action
d27cdd6
Fix typos
50d87e5
Add merge-cov action
f040b0f
Rename job step
f743734
Disable source deletion
d1818d5
Use configurations from tox.ini
d74d7e1
Undo changes and remove pytest pins
d74eb4e
Undo source code deletion
7e46898
Remove html cov
d3d15a9
Add codecov config
7b346bd
Fix pipeline step
57880e2
Try modifying codecov
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,8 @@ | ||
| # This file controls how codecov submit comments in the PR about code coverage. | ||
| # For more details, please see: | ||
| # https://docs.codecov.com/docs/pull-request-comments#section-behavior | ||
| comment: | ||
| behavior: new | ||
| layout: "sunburst, diff, files" | ||
| require_head: no | ||
| require_base: no |
This file contains hidden or 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| # Encapsulate the steps to merge code coverage reports | ||
| # You can call this action wit the following: | ||
| # | ||
| # steps: | ||
| # ... | ||
| # # make sure to checkout the code before running the local action | ||
| # - uses: actions/checkout@v2 | ||
| # - uses: ./.github/workflows/actions/merge-cov | ||
|
|
||
| name: 'Merge code coverage reports' | ||
| description: 'Merge the coverage reports from all of the different test runs.' | ||
|
|
||
| outputs: | ||
| # return the filename of the final coverage report (if needed by downstream) | ||
| cov-report-filename: | ||
| description: "Filename of the code coverage report" | ||
| value: ${{ steps.show-final-report.outputs.cov-report-final }} | ||
|
|
||
| runs: | ||
| using: "composite" | ||
| steps: | ||
| - name: Install dev-dependencies | ||
| shell: bash | ||
| run: | | ||
| pip install --upgrade pip setuptools wheel | ||
| python -m pip install coverage | ||
|
|
||
| - name: Show downloaded coverage reports | ||
| shell: bash | ||
| run: ls .coverage* | ||
|
|
||
| # Merge code coverage reports so the coverage numbers are accurate across | ||
| # different parallelized runs | ||
| - name: Merge coverage reports | ||
| shell: bash | ||
| run: | | ||
| python -m coverage combine .coverage* | ||
| python -m coverage report | ||
| python -m coverage xml | ||
|
|
||
| - name: Show merged report | ||
| id: show-final-report | ||
| shell: bash | ||
| run: | | ||
| echo "Final code coverage report: '$(ls *.xml)'" | ||
| echo "::set-output name=cov-report-final::$(echo $(ls *.xml))" |
This file contains hidden or 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| # Encapsulate the steps to run pytests | ||
| # You can call this action wit the following: | ||
| # | ||
| # steps: | ||
| # ... | ||
| # # make sure to checkout the code before running the local action | ||
| # - uses: actions/checkout@v2 | ||
| # - uses: ./.github/workflows/actions/run-tests | ||
| # with: | ||
| # test-kind: 'unit' | ||
| # test-marker: 'spark and notebooks' | ||
|
|
||
| name: 'Run Python tests' | ||
| description: 'Specify parameters to configure test subsets to run and collect test report for.' | ||
| inputs: | ||
| test-kind: | ||
| description: | ||
| "The kinds of tests to run. EX) unit|integration|smoke | ||
| This maps to those in the 'tests/<unit|integration|smoke>' folder" | ||
| required: true | ||
| default: 'unit' | ||
| test-marker: | ||
| description: | ||
| "Finer filter for selecting the tests to run with pytest markers. | ||
| See https://docs.pytest.org/en/6.2.x/example/markers.html" | ||
| default: 'not gpu and not notebooks and not spark' | ||
| outputs: | ||
| cov-report-filename: | ||
| description: "Filename of the code coverage report" | ||
| value: ${{ steps.rename-cov-report.outputs.cov-report-filename }} | ||
|
|
||
| runs: | ||
| using: "composite" | ||
| steps: | ||
| ################# Run Python tests ################# | ||
| - name: Install build dependencies (tox) | ||
| shell: bash | ||
| run: | | ||
| python -m pip install --upgrade pip setuptools wheel | ||
| pip install tox | ||
|
|
||
| - name: Run ${{ inputs.test-kind }} tests ('${{ inputs.test-marker }}') | ||
| shell: bash | ||
| # '-e py' will use the default 'python' executable found in system path | ||
| # for why using tox, see: https://tox.readthedocs.io/en/latest/index.html | ||
| # tox will do: | ||
| # 1. build and install source distribution (sdist) | ||
| # 2. run static analysis on the code (not implemented yet) | ||
| # 3. run all of the specified test environment (i.e. run tests in different py-versions, etc) | ||
| # 4. show test reports | ||
| run: | | ||
| tox -e py -- tests/${{ inputs.test-kind }} -m '${{ inputs.test-marker }}' | ||
|
|
||
| - name: Prepare Code Coverage Report | ||
| id: rename-cov-report | ||
| shell: bash | ||
| run: | | ||
| mv .coverage '.coverage_${{ inputs.test-marker }}_${{ inputs.test-kind }}_${{ github.sha }}' | ||
| echo "Coverage report renamed to: '$(ls .coverage*)'" | ||
| echo "::set-output name=cov-report-filename::$(echo $(ls .coverage*))" |
This file contains hidden or 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
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,164 @@ | ||
| # --------------------------------------------------------- | ||
| # Copyright (c) Microsoft Corporation. All rights reserved. | ||
| # Licensed under the MIT License. | ||
| # --------------------------------------------------------- | ||
| name: pr-gate | ||
|
|
||
| on: | ||
| push: | ||
| branches: [ laserprec/ghaction-ci, laserprec/ghaction-sandbox* ] | ||
|
|
||
| # This file defines following CI workflow: | ||
| # | ||
| # ┌──────────┐ ┌─────────┐ ┌────────┐ | ||
| # │ static ├─┬─► build* ├─┬─► test │ | ||
| # │ analysis │ │ │ (cpu) │ │ │ report │ | ||
| # └──────────┘ │ └─────────┘ │ └────────┘ | ||
| # │ ┌─────────┐ │ | ||
| # ├─► build* ├─┤ | ||
| # │ │ (spark) │ │ | ||
| # │ └─────────┘ │ | ||
| # │ ┌─────────┐ │ | ||
| # └─► build* ├─┘ | ||
| # │ (gpu) │ <-- TODO: Coming Soon | ||
| # └─────────┘ | ||
| # .... | ||
| # *each runs in PARALLEL the different combinations | ||
| # of python version, OS, test subsets, etc | ||
| # | ||
| # ASCII chart created via https://asciiflow.com/ | ||
|
|
||
| jobs: | ||
| ############################################### | ||
| ############### STATIC-ANALYSIS ############### | ||
| ############################################### | ||
| static-analysis: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v2 | ||
| - name: Use Python 3.6 | ||
| uses: actions/setup-python@v2 | ||
| with: | ||
| python-version: 3.6 | ||
|
|
||
| - name: Install dependencies (tox) | ||
| run: | | ||
| python -m pip install --upgrade pip setuptools wheel | ||
| pip install tox | ||
|
|
||
| - name: Run flake8 | ||
| # TODO: re-enable this flake8 block (turned off to get a draft of the pipeline infrastructure) | ||
| continue-on-error: true | ||
| run: | | ||
| tox -e flake8 | ||
|
|
||
| ############################################### | ||
| ################## CPU-BUILD ################## | ||
| ############################################### | ||
| build-cpu: | ||
| runs-on: ${{ matrix.os }} | ||
| needs: static-analysis | ||
| strategy: | ||
| matrix: | ||
| os: [ubuntu-latest] | ||
| python: [3.6] | ||
| # different kind of tests are located in tests/<unit|integration|smoke> folders | ||
| test-kind: ['unit'] | ||
| # pytest markers configured in tox.ini. See https://docs.pytest.org/en/6.2.x/example/markers.html | ||
| test-marker: ['not gpu and not spark and not notebooks', 'notebooks and not gpu and not spark'] | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v2 | ||
| ################# Run Python tests ################# | ||
| - name: Use Python ${{ matrix.python }} | ||
| uses: actions/setup-python@v2 | ||
| with: | ||
| python-version: ${{ matrix.python }} | ||
| # There are little documentation on how to call **local** actions | ||
| # https://docs.github.com/en/actions/creating-actions/about-actions#choosing-a-location-for-your-action | ||
| # but there is some working insights from this discussion: | ||
| # https://github.community/t/path-to-action-in-the-same-repository-as-workflow/16952/2 | ||
| - name: Run ${{ matrix.test-kind }} tests ('${{ matrix.test-marker }}') | ||
| uses: ./.github/workflows/actions/run-tests | ||
| with: | ||
| test-kind: ${{ matrix.test-kind }} | ||
| test-marker: ${{ matrix.test-marker }} | ||
| # Currently GitHub workflow cannot call an action from another action | ||
| # https://github.community/t/call-an-action-from-another-action/17524 | ||
| # Else this shared step can also be move to the local action: .github/workflows/actions/run-tests | ||
| - name: Upload Code Coverage | ||
| uses: actions/upload-artifact@v2 | ||
| with: | ||
| name: code-cov | ||
| path: .coverage* | ||
|
|
||
| ############################################### | ||
| ################# SPARK-BUILD ################# | ||
| ############################################### | ||
| build-spark: | ||
| runs-on: ${{ matrix.os }} | ||
| needs: static-analysis | ||
| strategy: | ||
| matrix: | ||
| os: [ubuntu-latest] | ||
| java: [8] | ||
| python: [3.6] | ||
| # different kind of tests are located in tests/<unit|integration|smoke> folders | ||
| test-kind: ['unit'] | ||
| # pytest markers configured in tox.ini. See https://docs.pytest.org/en/6.2.x/example/markers.html | ||
| test-marker: ['notebooks and spark and not gpu', 'spark and not notebooks and not gpu'] | ||
|
|
||
| steps: | ||
| - uses: actions/checkout@v2 | ||
| ################# Install spark dependencies (java) ################# | ||
| - name: Setup Java JDK | ||
| uses: actions/setup-java@v2.1.0 | ||
| with: | ||
| java-version: ${{ matrix.java }} | ||
| distribution: 'adopt' | ||
|
|
||
| ################# Run Python tests ################# | ||
| - name: Use Python ${{ matrix.python }} | ||
| uses: actions/setup-python@v2 | ||
| with: | ||
| python-version: ${{ matrix.python }} | ||
|
|
||
| - name: Run ${{ matrix.test-kind }} tests ('${{ matrix.test-marker }}') | ||
| uses: ./.github/workflows/actions/run-tests | ||
| with: | ||
| test-kind: ${{ matrix.test-kind }} | ||
| test-marker: ${{ matrix.test-marker }} | ||
|
|
||
| - name: Upload Code Coverage | ||
| uses: actions/upload-artifact@v2 | ||
| with: | ||
| name: code-cov | ||
| path: .coverage* | ||
|
|
||
| ############################################### | ||
| ############ TEST COVERAGE SUMMARY ############ | ||
| ############################################### | ||
| collect-code-cov: | ||
| runs-on: ubuntu-latest | ||
| needs: [build-cpu, build-spark] | ||
| steps: | ||
| - uses: actions/checkout@v2 | ||
| - name: Setup Python | ||
| uses: actions/setup-python@v2.2.2 | ||
| with: | ||
| python-version: '3.6' | ||
|
|
||
| - name: Download coverage reports from all previous jobs | ||
| uses: actions/download-artifact@v2 | ||
| with: | ||
| name: code-cov | ||
|
|
||
| - name: Merge coverage reports | ||
| uses: ./.github/workflows/actions/merge-cov | ||
|
|
||
| - name: Upload code coverage report to CodeCov | ||
| uses: codecov/codecov-action@v2.0.2 | ||
| with: | ||
| fail_ci_if_error: true | ||
| # comes from the last 'Merge coverage reports' step | ||
| files: ./coverage.xml | ||
This file contains hidden or 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
This file was deleted.
Oops, something went wrong.
This file contains hidden or 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
Empty file.
This file contains hidden or 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
Empty file.
Empty file.
Empty file.
Empty file.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Empty file.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.