Merge pull request #1358 from github/dependabot/github_actions/actions/checkout-4
[git-cola.git] / .github / workflows / ci.yml
blob61b2df4a1667dda6b843689c2f8726e039e5c768
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.12.0
12       - name: Checkout
13         uses: actions/checkout@v4
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.12.0
33       - name: Checkout
34         uses: actions/checkout@v4
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 cercis
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.12.0
74       - name: Checkout
75         uses: actions/checkout@v4
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 --requirement requirements/requirements.txt
90           pip install --requirement requirements/requirements-opt.txt
91           pip install --requirement requirements/requirements-dev.txt
92           pip install --requirement requirements/requirements-maint.txt
93       # Based on: contrib/win32/run-pynsist.sh
94       - name: Build Installer
95         run: |
96           make doc
97           make htmldir="$PWD/share/doc/git-cola/html" install-doc
98           pynsist pynsist.cfg
99           rm -r share/doc/git-cola/html
101           # Rename executable output
102           cd build/nsis
103           mv git-cola*.exe git-cola-latest-${{github.run_number}}.exe
104       - name: Upload Artifact
105         uses: actions/upload-artifact@v3
106         with:
107           name: git-cola-latest-${{github.run_number}}-${{runner.os}}
108           path: build/nsis/git-cola*.exe
110   macos:
111     name: macOS
112     runs-on: macos-latest
113     steps:
114       - name: Cancel Previous Runs
115         uses: styfle/cancel-workflow-action@0.12.0
116       - name: Checkout
117         uses: actions/checkout@v4
118       - name: Install Rust
119         run: rustup toolchain install stable --profile minimal --no-self-update
120       - name: Install Garden
121         run: cargo install garden-tools
122       - uses: Swatinem/rust-cache@v2
123       - name: Install Dependencies
124         run: |
125           set -x
126           brew install git-cola
127           python3 -m venv env3
128           source env3/bin/activate
129           python -m pip install wheel
130           garden requirements
131           garden requirements/dev
132       - name: Build Bundle
133         run: |
134           set -x
135           source env3/bin/activate
136           garden macos/app
137           mv git-cola.app build/
138       - name: Zip Artifact
139         run: zip -r git-cola.app.zip build/*
140       - name: Upload Artifact
141         uses: actions/upload-artifact@v3
142         with:
143           name: git-cola-latest-${{github.run_number}}-${{runner.os}}
144           path: git-cola.app.zip