ci: cancel previous runs
[git-cola.git] / .github / workflows / ci.yml
blob0640d3021a1096d2b04f999037fbf1c8fa0f909b
1 name: CI
3 on: [push, pull_request]
5 jobs:
6   build:
7     name: Build
8     runs-on: ubuntu-latest
9     steps:
10       - name: Cancel Previous Runs
11         uses: styfle/cancel-workflow-action@0.11.0
12       - name: Checkout
13         uses: actions/checkout@v3
14       - name: Install Rust
15         run: rustup toolchain install stable --profile minimal --no-self-update
16       - name: Install Garden
17         run: cargo install garden-tools
18       - uses: Swatinem/rust-cache@v2
19       - name: Install build dependencies
20         run: |
21           set -x
22           sudo apt-get update
23           sudo apt-get install python3-sphinx python3-qtpy python3-pyqt5
24       - name: Install Git Cola
25         run: garden -D prefix=dist install
27   test:
28     name: Test
29     runs-on: ubuntu-latest
30     steps:
31       - name: Cancel Previous Runs
32         uses: styfle/cancel-workflow-action@0.11.0
33       - name: Checkout
34         uses: actions/checkout@v3
35       - name: Install Rust
36         run: rustup toolchain install stable --profile minimal --no-self-update
37       - name: Install Garden
38         run: cargo install garden-tools
39       - uses: Swatinem/rust-cache@v2
40       - name: Install Dependencies
41         run: |
42           set -x
43           sudo apt-get update
44           # Runtime dependencies (required)
45           sudo apt-get install \
46               python3-qtpy \
47               python3-pyqt5
48           # Runtime dependencies (optional)
49           sudo apt-get install \
50               python3-send2trash
51           # Development dependencies
52           sudo apt-get install \
53               pylint \
54               python-is-python3 \
55               python3-pytest \
56               python3-setuptools-scm \
57               python3-sphinx
58           pip install brunette
59       - name: Configure tests
60         run: |
61           git config --global user.name "Git Cola"
62           git config --global user.email git-cola@localhost
63       - name: Run tests and checks
64         run: garden check
65       - name: Code formatting
66         run: garden fmt -- --check
68   windows:
69     name: Windows
70     runs-on: windows-latest
71     steps:
72       - name: Cancel Previous Runs
73         uses: styfle/cancel-workflow-action@0.11.0
74       - name: Checkout
75         uses: actions/checkout@v3
76       - name: Setup Python
77         uses: actions/setup-python@v4
78         with:
79           python-version: '3.x'
80           architecture: x64
81       - name: Pip Cache
82         uses: actions/cache@v3
83         with:
84           path: ~/AppData/Local/pip/Cache
85           key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements/requirements*.txt') }}
86       - name: Install Dependencies
87         run: |
88           pip install wheel
89           pip install Sphinx==5.3.0
90           pip install --requirement requirements/requirements.txt
91           pip install --requirement requirements/requirements-opt.txt
92           pip install --requirement requirements/requirements-dev.txt
93           pip install --requirement requirements/requirements-maint.txt
94       # Based on: contrib/win32/run-pynsist.sh
95       - name: Build Installer
96         run: |
97           make doc
98           make htmldir="$PWD/share/doc/git-cola/html" install-doc
99           pynsist pynsist.cfg
100           rm -r share/doc/git-cola/html
102           # Rename executable output
103           cd build/nsis
104           mv git-cola*.exe git-cola-latest-${{github.run_number}}.exe
105       - name: Upload Artifact
106         uses: actions/upload-artifact@v3
107         with:
108           name: git-cola-latest-${{github.run_number}}-${{runner.os}}
109           path: build/nsis/git-cola*.exe
111   macos:
112     name: macOS
113     runs-on: macos-latest
114     steps:
115       - name: Cancel Previous Runs
116         uses: styfle/cancel-workflow-action@0.11.0
117       - name: Checkout
118         uses: actions/checkout@v3
119       - name: Install Rust
120         run: rustup toolchain install stable --profile minimal --no-self-update
121       - name: Install Garden
122         run: cargo install garden-tools
123       - uses: Swatinem/rust-cache@v2
124       - name: Install Dependencies
125         run: |
126           set -x
127           brew install git-cola
128           python3 -m venv env3
129           source env3/bin/activate
130           python -m pip install wheel
131           python -m pip install Sphinx==5.3.0
132           garden requirements
133           garden requirements/dev
134       - name: Build Bundle
135         run: |
136           set -x
137           source env3/bin/activate
138           garden macos/app
139           mv git-cola.app build/
140       - name: Zip Artifact
141         run: zip -r git-cola.app.zip build/*
142       - name: Upload Artifact
143         uses: actions/upload-artifact@v3
144         with:
145           name: git-cola-latest-${{github.run_number}}-${{runner.os}}
146           path: git-cola.app.zip