@@ -3,63 +3,68 @@ name: Continuous Integration
33on : [push, pull_request]
44
55jobs :
6- unix-build :
7- name : Unix Build
6+ continuous-integration :
7+ name : ${{ matrix.os }} - Python ${{ matrix.python-version }}
88 strategy :
99 matrix :
10- os : [ubuntu-18.04, macOS-latest]
11- python-version : [2.7, 3.5, 3.6, 3.7, 3.8]
10+ os : [macOS-latest, ubuntu-18.04, windows-latest]
11+ python-version : [2.7, 3.6, 3.7, 3.8]
12+ fail-fast : false
1213 runs-on : ${{ matrix.os }}
1314 steps :
1415 - uses : actions/checkout@v1
1516 - name : Environment Variables
1617 run : |
17- CI_PYTHON_VERSION=${{ matrix.python-version }}
18- CI_PACKAGE=colour
19- CI_SHA=${{ github.sha }}
20- CI_SLACK_WEBHOOK=${{ secrets.SLACK_WEBHOOK }}
21- CI_SLACK_SUCCESS_NOTIFICATION="payload={\"attachments\": [{\"color\": \"#4CAF50\", \"author_name\": \"Python ${{ matrix.python-version }} build on ${{ matrix.os }}\", \"text\": \"Build for commit *${CI_SHA:0:7}* succeeded!\", \"title\": \"${{ github.repository }}@${{ github.ref }}\", \"title_link\": \"https://github.com/${{ github.repository }}/commit/${{ github.sha }}/checks\", \"footer\": \"Triggered by ${{ github.actor }}\"}], \"username\":\"Github Actions @ ${{ github.repository }}\", \"channel\":\"#continuous-integration\", \"icon_url\":\"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\"}"
22- CI_SLACK_FAILURE_NOTIFICATION="${CI_SLACK_SUCCESS_NOTIFICATION/4CAF50/F44336}"
23- CI_SLACK_FAILURE_NOTIFICATION="${CI_SLACK_FAILURE_NOTIFICATION/succeeded/failed}"
24- CI_OPENIMAGEIO_ARTIFACT=https://github.com/colour-science/artifacts/suites/407105362/artifacts/1192372
25- CI_OPENIMAGEIO_VERSION=2.1.10.1
26- COVERALLS_REPO_TOKEN=${{ secrets.COVERALLS_REPO_TOKEN }}
27- MPLBACKEND=AGG
28- echo ::set-env name=CI_PYTHON_VERSION::$CI_PYTHON_VERSION
29- echo ::set-env name=CI_PACKAGE::$CI_PACKAGE
30- echo ::set-env name=CI_SHA::$CI_SHA
31- echo ::set-env name=CI_SLACK_WEBHOOK::$CI_SLACK_WEBHOOK
32- echo ::set-env name=CI_SLACK_SUCCESS_NOTIFICATION::$CI_SLACK_SUCCESS_NOTIFICATION
33- echo ::set-env name=CI_SLACK_FAILURE_NOTIFICATION::$CI_SLACK_FAILURE_NOTIFICATION
34- echo ::set-env name=COVERALLS_REPO_TOKEN::$COVERALLS_REPO_TOKEN
35- echo ::set-env name=CI_OPENIMAGEIO_ARTIFACT::$CI_OPENIMAGEIO_ARTIFACT
36- echo ::set-env name=CI_OPENIMAGEIO_VERSION::$CI_OPENIMAGEIO_VERSION
37- echo ::set-env name=MPLBACKEND::$MPLBACKEND
18+ echo "CI_PYTHON_VERSION=${{ matrix.python-version }}" >> $GITHUB_ENV
19+ echo "CI_PACKAGE=colour" >> $GITHUB_ENV
20+ echo "CI_SHA=${{ github.sha }}" >> $GITHUB_ENV
21+ echo "CI_OPENIMAGEIO_VERSION=2.1.10.1" >> $GITHUB_ENV
22+ echo "CI_OPENIMAGEIO_ARTIFACT=https://github.com/colour-science/artifacts/releases/download/OpenImageIO-Release-2.1.10.1/OpenImageIO-Release-2.1.10.1.zip" >> $GITHUB_ENV
23+ echo "COVERALLS_REPO_TOKEN=${{ secrets.COVERALLS_REPO_TOKEN }}" >> $GITHUB_ENV
24+ echo "MPLBACKEND=AGG" >> $GITHUB_ENV
25+ shell : bash
3826 - name : Set up Python ${{ matrix.python-version }}
3927 uses : actions/setup-python@v1
4028 with :
4129 python-version : ${{ matrix.python-version }}
42- - name : Ubuntu - Update OS & Install APT Dependencies
30+ - name : Update OS & Install APT Dependencies (Ubuntu)
4331 if : matrix.os == 'ubuntu-18.04'
4432 run : |
4533 sudo apt-get --yes install libboost-all-dev libilmbase-dev libopenexr-dev libpng-dev libtiff5-dev
34+ - name : Update OS & Install APT Dependencies (macOs)
35+ if : matrix.os == 'macOS-latest'
36+ run : |
37+ brew install gnu-sed
38+ ln -s /usr/local/bin/gsed /usr/local/bin/sed
39+ shell : bash
4640 - name : Install Poetry
4741 run : |
4842 curl -L https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py -o get-poetry.py
49- python get-poetry.py --preview --version 1.0.0b3
50- PATH=$HOME/.poetry/bin:$PATH
51- echo ::set-env name=PATH::$PATH
52- - name : Python 3.8 - Matplotlib
53- if : matrix.python-version == '3.8'
54- run : |
55- sed -i.bak 's/python = "~2.7 || ^3.5"/python = "^3.6"/g' pyproject.toml
56- sed -i.bak 's/matplotlib = { version = "\*"/matplotlib = { version = "^3.1"/g' pyproject.toml
43+ python get-poetry.py --version 1.0.10
44+ echo "$HOME/.poetry/bin" >> $GITHUB_PATH
45+ shell : bash
46+ - name : Update pyproject.toml file (Python 2.7)
47+ if : matrix.python-version == '2.7'
48+ run : |
49+ sed -i.bak 's/python = "~2.7 || ^3.6"/python = "~2.7"/g' pyproject.toml
50+ sed -i.bak '/scipy = "\^1\.1\.0"/ a qtconsole = "4.7.7"' pyproject.toml
51+ shell : bash
52+ - name : Update pyproject.toml file (Windows, Python 2.7)
53+ if : matrix.os == 'windows-latest' && matrix.python-version == '2.7'
54+ run : |
55+ sed -i.bak '/scipy = "\^1\.1\.0"/ a pywin32 = "228"' pyproject.toml
56+ shell : bash
57+ - name : Update pyproject.toml file (Python 3.x)
58+ if : matrix.python-version != '2.7'
59+ run : |
60+ sed -i.bak 's/python = "~2.7 || ^3.6"/python = "^3.6"/g' pyproject.toml
61+ shell : bash
5762 - name : Install Package Dependencies
5863 run : |
5964 poetry install --extras "optional plotting"
60- source $( poetry env info -p)/bin/activate
61- python -c "import imageio;imageio.plugins.freeimage.download()"
62- - name : Ubuntu - Install OpenImageIO
65+ poetry run python -c "import imageio;imageio.plugins.freeimage.download()"
66+ shell : bash
67+ - name : Install OpenImageIO (Ubuntu)
6368 if : matrix.os == 'ubuntu-18.04' && matrix.python-version == '3.6'
6469 run : |
6570 curl -L $CI_OPENIMAGEIO_ARTIFACT -o OpenImageIO-Release-$CI_OPENIMAGEIO_VERSION.zip
@@ -68,91 +73,17 @@ jobs:
6873 sudo cp -r OpenImageIO-Release-$CI_OPENIMAGEIO_VERSION/linux64/lib/* /usr/lib/
6974 sudo rm -rf /usr/lib/python$CI_PYTHON_VERSION
7075 cp OpenImageIO-Release-$CI_OPENIMAGEIO_VERSION/linux64/lib/python$CI_PYTHON_VERSION/site-packages/OpenImageIO.so $(poetry env info -p)/lib/python$CI_PYTHON_VERSION/site-packages/
76+ shell : bash
7177 - name : Lint with flake8
7278 run : |
73- source $(poetry env info -p)/bin/activate
74- flake8 $CI_PACKAGE --count --show-source --statistics
79+ poetry run flake8 $CI_PACKAGE --count --show-source --statistics
80+ shell : bash
7581 - name : Test with nosetests
7682 run : |
77- source $( poetry env info -p)/bin/activate
78- python -W ignore -m nose -v --nocapture --with-doctest --doctest-options=+ELLIPSIS --with-coverage --cover-package=$CI_PACKAGE $CI_PACKAGE
83+ poetry run python -W ignore -m nose -q -v --with-doctest --doctest-options=+ELLIPSIS --with-coverage --cover-package=$CI_PACKAGE $CI_PACKAGE
84+ shell : bash
7985 - name : Upload Coverage to coveralls.io
8086 if : matrix.python-version == '3.6' || matrix.python-version == '3.7' || matrix.python-version == '3.8'
8187 run : |
82- source $(poetry env info -p)/bin/activate
83- if [ -z "$COVERALLS_REPO_TOKEN" ]; then echo \"COVERALLS_REPO_TOKEN\" secret is undefined!; else coveralls; fi
84- - name : Notify Slack
85- if : always()
86- run : |
87- if [ "${{ job.status }}" == "Success" ]; then CI_SLACK_NOTIFICATION="$CI_SLACK_SUCCESS_NOTIFICATION"; else CI_SLACK_NOTIFICATION="$CI_SLACK_FAILURE_NOTIFICATION"; fi
88- if [ -z "$CI_SLACK_WEBHOOK" ]; then echo \"SLACK_WEBHOOK\" secret is undefined!; else curl -k -d "$CI_SLACK_NOTIFICATION" -X POST $CI_SLACK_WEBHOOK; fi
89- windows-build :
90- name : Windows Build
91- strategy :
92- matrix :
93- os : [windows-2019]
94- python-version : [2.7, 3.5, 3.6, 3.7]
95- runs-on : ${{ matrix.os }}
96- steps :
97- - uses : actions/checkout@v1
98- - name : Environment Variables
99- run : |
100- set CI_PYTHON_VERSION=${{ matrix.python-version }}
101- set CI_PACKAGE=colour
102- set CI_SHA=${{ github.sha }}
103- set CI_SLACK_WEBHOOK=${{ secrets.SLACK_WEBHOOK }}
104- set CI_SLACK_SUCCESS_NOTIFICATION="payload={\"attachments\": [{\"color\": \"#4CAF50\", \"author_name\": \"Python ${{ matrix.python-version }} build on ${{ matrix.os }}\", \"text\": \"Build for commit *"%CI_SHA:~0,7%"* succeeded!\", \"title\": \"${{ github.repository }}@${{ github.ref }}\", \"title_link\": \"https://github.com/${{ github.repository }}/commit/${{ github.sha }}/checks\", \"footer\": \"Triggered by ${{ github.actor }}\"}], \"username\":\"Github Actions @ ${{ github.repository }}\", \"channel\":\"#continuous-integration\", \"icon_url\":\"https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png\"}"
105- set CI_SLACK_FAILURE_NOTIFICATION=%CI_SLACK_SUCCESS_NOTIFICATION:4CAF50=F44336%
106- set CI_SLACK_FAILURE_NOTIFICATION=%CI_SLACK_FAILURE_NOTIFICATION:succeeded=failed%
107- set COVERALLS_REPO_TOKEN=${{ secrets.COVERALLS_REPO_TOKEN }}
108- set MPLBACKEND=AGG
109- echo ::set-env name=CI_PYTHON_VERSION::%CI_PYTHON_VERSION%
110- echo ::set-env name=CI_PACKAGE::%CI_PACKAGE%
111- echo ::set-env name=CI_SHA::%CI_SHA%
112- echo ::set-env name=CI_SLACK_WEBHOOK::%CI_SLACK_WEBHOOK%
113- echo ::set-env name=CI_SLACK_SUCCESS_NOTIFICATION::%CI_SLACK_SUCCESS_NOTIFICATION%
114- echo ::set-env name=CI_SLACK_FAILURE_NOTIFICATION::%CI_SLACK_FAILURE_NOTIFICATION%
115- echo ::set-env name=COVERALLS_REPO_TOKEN::%COVERALLS_REPO_TOKEN%
116- echo ::set-env name=MPLBACKEND::%MPLBACKEND%
117- shell : cmd
118- - name : Set up Python ${{ matrix.python-version }}
119- uses : actions/setup-python@v1
120- with :
121- python-version : ${{ matrix.python-version }}
122- - name : Install Poetry
123- run : |
124- curl -L https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py -o get-poetry.py
125- python get-poetry.py --preview --version 1.0.0b3
126- set PATH=%USERPROFILE%\.poetry\bin;%PATH%
127- echo ::set-env name=PATH::%PATH%
128- shell : cmd
129- - name : Install Package Dependencies
130- run : |
131- call poetry install --extras "optional plotting"
132- FOR /F %%a IN ('poetry env info -p') DO SET CI_VIRTUAL_ENVIRONMENT=%%a
133- echo ::set-env name=CI_VIRTUAL_ENVIRONMENT::%CI_VIRTUAL_ENVIRONMENT%
134- call %CI_VIRTUAL_ENVIRONMENT%\scripts\activate
135- python -c "import imageio;imageio.plugins.freeimage.download()"
136- shell : cmd
137- - name : Lint with flake8
138- run : |
139- call %CI_VIRTUAL_ENVIRONMENT%\scripts\activate
140- flake8 %CI_PACKAGE% --count --show-source --statistics
141- shell : cmd
142- - name : Test with nosetests
143- run : |
144- call %CI_VIRTUAL_ENVIRONMENT%\scripts\activate
145- python -W ignore -m nose -v --nocapture --with-doctest --doctest-options=+ELLIPSIS --with-coverage --cover-package=%CI_PACKAGE% %CI_PACKAGE%
146- shell : cmd
147- - name : Upload Coverage to coveralls.io
148- if : matrix.python-version == '3.6' || matrix.python-version == '3.7'
149- run : |
150- call %CI_VIRTUAL_ENVIRONMENT%\scripts\activate
151- IF "%COVERALLS_REPO_TOKEN%"=="" (echo "COVERALLS_REPO_TOKEN" secret is undefined!) ELSE (coveralls)
152- shell : cmd
153- - name : Notify Slack
154- if : always()
155- run : |
156- IF "${{ job.status }}"=="Success" (set CI_SLACK_NOTIFICATION=%CI_SLACK_SUCCESS_NOTIFICATION%) ELSE (set CI_SLACK_NOTIFICATION=%CI_SLACK_FAILURE_NOTIFICATION%)
157- IF "%CI_SLACK_WEBHOOK%"=="" (echo "SLACK_WEBHOOK" secret is undefined!) ELSE (curl -k -d %CI_SLACK_NOTIFICATION% -X POST %CI_SLACK_WEBHOOK%)
158- shell : cmd
88+ if [ -z "$COVERALLS_REPO_TOKEN" ]; then echo \"COVERALLS_REPO_TOKEN\" secret is undefined!; else poetry run coveralls; fi
89+ shell : bash
0 commit comments