Skip to content

Commit a1c7518

Browse files
authored
Merge pull request #900 from sanders41/fastapi-template
Add template for FastAPI applications
2 parents 6d3ed12 + 23fe5b1 commit a1c7518

File tree

62 files changed

+6868
-391
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+6868
-391
lines changed

.github/workflows/publish_binaries.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
- name: Add target
3838
run: rustup target add ${{ matrix.target }}
3939
- name: Build
40-
run: cargo build --release --locked --target ${{ matrix.target }}
40+
run: cargo build --release --locked --target ${{ matrix.target }} --all-features
4141
- name: Upload binaries to release
4242
uses: svenstaro/upload-release-action@v2
4343
with:
@@ -70,7 +70,7 @@ jobs:
7070
- name: Create package
7171
id: create-deb
7272
run: |
73-
cargo deb --deb-revision="" # --deb-revision="" removes the -1 post tag
73+
cargo deb --locked --all-features --deb-revision="" # --deb-revision="" removes the -1 post tag
7474
cd target/debian
7575
echo "DEB_FILE=$(find python-project-generator*_*.deb)" >> "$GITHUB_OUTPUT"
7676
- name: Upload deb package to release

.github/workflows/testing.yml

Lines changed: 70 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -18,21 +18,36 @@ jobs:
1818
runs-on: ubuntu-latest
1919
steps:
2020
- uses: actions/checkout@v5
21-
- name: Install Rust
22-
run: |
23-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
21+
- name: install Rust
22+
uses: dtolnay/rust-toolchain@stable
23+
with:
24+
components: clippy
2425
- name: Cache dependencies
2526
uses: Swatinem/[email protected]
2627
- name: Run cargo clippy
2728
run: cargo clippy --all-targets -- --deny warnings
29+
clippy-fastapi:
30+
name: clippy-fastapi
31+
runs-on: ubuntu-latest
32+
steps:
33+
- uses: actions/checkout@v5
34+
- name: install Rust
35+
uses: dtolnay/rust-toolchain@stable
36+
with:
37+
components: clippy
38+
- name: Cache dependencies
39+
uses: Swatinem/[email protected]
40+
- name: Run cargo clippy
41+
run: cargo clippy --all-targets -F fastapi -- --deny warnings
2842
fmt:
2943
name: Rustfmt
3044
runs-on: ubuntu-latest
3145
steps:
3246
- uses: actions/checkout@v5
33-
- name: Install Rust
34-
run: |
35-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
47+
- name: install Rust
48+
with:
49+
components: rustfmt
50+
uses: dtolnay/rust-toolchain@stable
3651
- name: Cache dependencies
3752
uses: Swatinem/[email protected]
3853
- name: Run cargo fmt
@@ -42,17 +57,31 @@ jobs:
4257
strategy:
4358
fail-fast: false
4459
matrix:
45-
os: [ubuntu-latest, macos-latest, windows-latest]
60+
os: [ubuntu-latest, windows-latest]
4661
runs-on: ${{ matrix.os }}
4762
steps:
4863
- uses: actions/checkout@v5
49-
- name: Install Rust
50-
run: |
51-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
64+
- name: install Rust
65+
uses: dtolnay/rust-toolchain@stable
5266
- name: Cache dependencies
5367
uses: Swatinem/[email protected]
5468
- name: Run cargo test
5569
run: cargo test --locked
70+
test-fastapi:
71+
name: test-fastapi
72+
strategy:
73+
fail-fast: false
74+
matrix:
75+
os: [ubuntu-latest, windows-latest]
76+
runs-on: ${{ matrix.os }}
77+
steps:
78+
- uses: actions/checkout@v5
79+
- name: install Rust
80+
uses: dtolnay/rust-toolchain@stable
81+
- name: Cache dependencies
82+
uses: Swatinem/[email protected]
83+
- name: Run cargo test
84+
run: cargo test --locked -F fastapi
5685
uv-linting:
5786
strategy:
5887
fail-fast: false
@@ -61,12 +90,11 @@ jobs:
6190
runs-on: ubuntu-latest
6291
steps:
6392
- uses: actions/checkout@v5
64-
- name: Install Rust
65-
run: |
66-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
93+
- name: install Rust
94+
uses: dtolnay/rust-toolchain@stable
6795
- name: Cache Rust dependencies
6896
uses: Swatinem/[email protected]
69-
- name: Install uv on Linux and Mac
97+
- name: Install uv on Linux
7098
if: runner.os != 'Windows'
7199
run: curl -LsSf https://astral.sh/uv/install.sh | sh
72100
- name: Install uv on Windows
@@ -99,16 +127,15 @@ jobs:
99127
fail-fast: false
100128
matrix:
101129
project_type: ["application", "lib"]
102-
os: [ubuntu-latest, macos-latest, windows-latest]
130+
os: [ubuntu-latest, windows-latest]
103131
runs-on: ${{ matrix.os }}
104132
steps:
105133
- uses: actions/checkout@v5
106-
- name: Install Rust
107-
run: |
108-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
134+
- name: install Rust
135+
uses: dtolnay/rust-toolchain@stable
109136
- name: Cache Rust dependencies
110137
uses: Swatinem/[email protected]
111-
- name: Install uv on Linux and Mac
138+
- name: Install uv on Linux
112139
if: runner.os != 'Windows'
113140
run: curl -LsSf https://astral.sh/uv/install.sh | sh
114141
- name: Install uv on Windows
@@ -146,9 +173,8 @@ jobs:
146173
runs-on: ubuntu-latest
147174
steps:
148175
- uses: actions/checkout@v5
149-
- name: Install Rust
150-
run: |
151-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
176+
- name: install Rust
177+
uses: dtolnay/rust-toolchain@stable
152178
- name: Cache Rust dependencies
153179
uses: Swatinem/[email protected]
154180
- name: Install Poetry
@@ -182,13 +208,12 @@ jobs:
182208
fail-fast: false
183209
matrix:
184210
project_type: ["application", "lib"]
185-
os: [ubuntu-latest, macos-latest, windows-latest]
211+
os: [ubuntu-latest, windows-latest]
186212
runs-on: ${{ matrix.os }}
187213
steps:
188214
- uses: actions/checkout@v5
189-
- name: Install Rust
190-
run: |
191-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
215+
- name: install Rust
216+
uses: dtolnay/rust-toolchain@stable
192217
- name: Cache Rust dependencies
193218
uses: Swatinem/[email protected]
194219
- name: Install Poetry
@@ -228,12 +253,13 @@ jobs:
228253
- uses: actions/checkout@v5
229254
- name: Install Just
230255
uses: taiki-e/install-action@just
231-
- name: Install Rust
232-
run: |
233-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
256+
- name: install Rust
257+
uses: dtolnay/rust-toolchain@stable
258+
with:
259+
components: clippy, rustfmt
234260
- name: Cache Rust dependencies
235261
uses: Swatinem/[email protected]
236-
- name: Install uv on Linux and Mac
262+
- name: Install uv on Linux
237263
if: runner.os != 'Windows'
238264
run: curl -LsSf https://astral.sh/uv/install.sh | sh
239265
- name: Install uv on Windows
@@ -273,16 +299,15 @@ jobs:
273299
fail-fast: false
274300
matrix:
275301
project_type: ["application", "lib"]
276-
os: [ubuntu-latest, macos-latest, windows-latest]
302+
os: [ubuntu-latest, windows-latest]
277303
runs-on: ${{ matrix.os }}
278304
steps:
279305
- uses: actions/checkout@v5
280-
- name: Install Rust
281-
run: |
282-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
306+
- name: install Rust
307+
uses: dtolnay/rust-toolchain@stable
283308
- name: Cache Rust dependencies
284309
uses: Swatinem/[email protected]
285-
- name: Install uv on Linux and Mac
310+
- name: Install uv on Linux
286311
if: runner.os != 'Windows'
287312
run: curl -LsSf https://astral.sh/uv/install.sh | sh
288313
- name: Install uv on Windows
@@ -320,9 +345,8 @@ jobs:
320345
runs-on: ubuntu-latest
321346
steps:
322347
- uses: actions/checkout@v5
323-
- name: Install Rust
324-
run: |
325-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
348+
- name: install Rust
349+
uses: dtolnay/rust-toolchain@stable
326350
- name: Cache Rust dependencies
327351
uses: Swatinem/[email protected]
328352
- name: Set up Python
@@ -353,13 +377,12 @@ jobs:
353377
fail-fast: false
354378
matrix:
355379
project_type: ["application", "lib"]
356-
os: [ubuntu-latest, macos-latest, windows-latest]
380+
os: [ubuntu-latest, windows-latest]
357381
runs-on: ${{ matrix.os }}
358382
steps:
359383
- uses: actions/checkout@v5
360-
- name: Install Rust
361-
run: |
362-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
384+
- name: install Rust
385+
uses: dtolnay/rust-toolchain@stable
363386
- name: Cache Rust dependencies
364387
uses: Swatinem/[email protected]
365388
- name: Set up Python
@@ -394,9 +417,8 @@ jobs:
394417
runs-on: ubuntu-latest
395418
steps:
396419
- uses: actions/checkout@v5
397-
- name: Install Rust
398-
run: |
399-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
420+
- name: install Rust
421+
uses: dtolnay/rust-toolchain@stable
400422
- name: Cache Rust dependencies
401423
uses: Swatinem/[email protected]
402424
- name: Build package
@@ -426,13 +448,12 @@ jobs:
426448
fail-fast: false
427449
matrix:
428450
project_type: ["application", "lib"]
429-
os: [ubuntu-latest, macos-latest, windows-latest]
451+
os: [ubuntu-latest, windows-latest]
430452
runs-on: ${{ matrix.os }}
431453
steps:
432454
- uses: actions/checkout@v5
433-
- name: Install Rust
434-
run: |
435-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
455+
- name: install Rust
456+
uses: dtolnay/rust-toolchain@stable
436457
- name: Cache Rust dependencies
437458
uses: Swatinem/[email protected]
438459
- name: Build package
Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
name: Testing FastAPI
2+
on:
3+
push:
4+
branches:
5+
- main
6+
pull_request:
7+
env:
8+
CARGO_TERM_COLOR: always
9+
RUST_BACKTRACE: 1
10+
RUSTFLAGS: "-D warnings"
11+
WORKING_DIR: "my-project"
12+
MIN_PYTHON_VERSION: "3.11"
13+
SECRET_KEY: someKey
14+
FIRST_SUPERUSER_EMAIL: [email protected]
15+
FIRST_SUPERUSER_PASSWORD: My_password1
16+
FIRST_SUPERUSER_NAME: "Wade Watts"
17+
POSTGRES_HOST: 127.0.0.1
18+
POSTGRES_PORT: 5432
19+
POSTGRES_USER: postgres
20+
POSTGRES_PASSWORD: test_password
21+
POSTGRES_DB: test_db
22+
VALKEY_HOST: 127.0.0.1
23+
VALKEY_PASSWORD: test_password
24+
STACK_NAME: test-stack
25+
DOMAIN: 127.0.0.1
26+
PRODUCTION_MODE: false
27+
DATABASE_URL: postgresql://postgres:[email protected]:5432/test_db
28+
jobs:
29+
test-uv-fastapi-project:
30+
name: test-fastapi-uv-setup-fastapi
31+
strategy:
32+
fail-fast: false
33+
runs-on: ubuntu-latest
34+
steps:
35+
- uses: actions/checkout@v5
36+
- name: install Rust
37+
uses: dtolnay/rust-toolchain@stable
38+
- name: Cache dependencies
39+
uses: Swatinem/[email protected]
40+
- name: Install sqlx-cli
41+
run: cargo install sqlx-cli --no-default-features -F native-tls -F postgres
42+
- name: Install uv
43+
run: curl -LsSf https://astral.sh/uv/install.sh | sh
44+
- name: Set up Python
45+
uses: actions/setup-python@v6
46+
with:
47+
python-version: ${{ env.MIN_PYTHON_VERSION }}
48+
- name: Build package
49+
run: cargo build --release -F fastapi
50+
- name: Run creation
51+
run: ./scripts/ci_run_fastapi.sh "fastapi" 1
52+
shell: bash
53+
- name: Install Dependencies
54+
working-directory: ${{ env.WORKING_DIR }}
55+
run: |
56+
uv lock
57+
uv sync --frozen
58+
- name: Pre-commit check
59+
working-directory: ${{ env.WORKING_DIR }}
60+
run: |
61+
uv run pre-commit install
62+
git add .
63+
uv run pre-commit run --all-files
64+
- name: make .env
65+
working-directory: ${{ env.WORKING_DIR }}
66+
run: touch .env
67+
- name: Build and start Docker containers
68+
working-directory: ${{ env.WORKING_DIR }}
69+
run: docker compose up -d
70+
- name: Test with pytest
71+
working-directory: ${{ env.WORKING_DIR }}
72+
run: uv run pytest -n auto
73+
test-uv-non-fastapi-project:
74+
name: test-fastapi-uv-setup-non-fastapi
75+
strategy:
76+
fail-fast: false
77+
matrix:
78+
project_type: ["application", "lib"]
79+
runs-on: ubuntu-latest
80+
steps:
81+
- uses: actions/checkout@v5
82+
- name: install Rust
83+
uses: dtolnay/rust-toolchain@stable
84+
- name: Cache dependencies
85+
uses: Swatinem/[email protected]
86+
- name: Install uv
87+
run: curl -LsSf https://astral.sh/uv/install.sh | sh
88+
- name: Set up Python
89+
uses: actions/setup-python@v6
90+
with:
91+
python-version: ${{ env.MIN_PYTHON_VERSION }}
92+
- name: Build package
93+
run: cargo build --release -F fastapi
94+
- name: Run creation
95+
run: ./scripts/ci_run_fastapi.sh ${{ matrix.project_type }} 1
96+
shell: bash
97+
- name: Install Dependencies
98+
working-directory: ${{ env.WORKING_DIR }}
99+
run: |
100+
uv lock
101+
uv sync --frozen
102+
- name: Pre-commit check
103+
working-directory: ${{ env.WORKING_DIR }}
104+
run: |
105+
uv run pre-commit install
106+
git add .
107+
uv run pre-commit run --all-files
108+
- name: Test with pytest
109+
working-directory: ${{ env.WORKING_DIR }}
110+
if: matrix.project_type == 'application'
111+
run: uv run pytest

Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ license = "MIT"
1616
name = "python-project"
1717
path = "src/main.rs"
1818

19+
[features]
20+
fastapi = []
21+
1922
[dependencies]
2023
anyhow = "1.0.100"
2124
clap = { version = "4.5.48", features = ["color", "suggestions", "derive"] }

0 commit comments

Comments
 (0)