Template
Compare commits
6
Commits
8c529f7e8b
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d51aca2ccf | ||
|
|
93a7969315 | ||
|
|
b8288087ab | ||
|
|
827dda4162 | ||
|
|
6d48820a7e | ||
|
|
32d1e2cd29 |
+1
-1
@@ -1,2 +1,2 @@
|
||||
[registries.gitea]
|
||||
index = "sparse+https://gitea.example.com/api/packages/crates/cargo/"
|
||||
index = "sparse+https://gitea.melfely.com/api/packages/crates/cargo/"
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
name: Crossplatform Linting && Build
|
||||
name: Lint & Build
|
||||
|
||||
on:
|
||||
push:
|
||||
@@ -19,9 +19,6 @@ jobs:
|
||||
with:
|
||||
components: rustfmt, clippy
|
||||
|
||||
- name: Update Debian Package List
|
||||
run: apt update
|
||||
|
||||
- name: Install cargo sort
|
||||
uses: taiki-e/install-action@v2
|
||||
with:
|
||||
@@ -36,7 +33,7 @@ jobs:
|
||||
run: cargo fmt --check
|
||||
|
||||
- name: Check import sorting
|
||||
run: cargo sort --grouped --check --check-format
|
||||
run: cargo sort --workspace --grouped --check --check-format
|
||||
|
||||
- name: Check for unused dependencies
|
||||
run: cargo machete
|
||||
@@ -64,5 +61,90 @@ jobs:
|
||||
cargo build --target x86_64-unknown-linux-musl --release --locked
|
||||
|
||||
|
||||
|
||||
cross_build_linux:
|
||||
name: Cross-Build-Linux
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, build]
|
||||
|
||||
steps:
|
||||
- name: Checkout Project
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Crosscompile for aarch64 linux, windows, macos
|
||||
uses: zijiren233/cargo-cross@v1
|
||||
with:
|
||||
targets: |
|
||||
aarch64-unknown-linux-musl
|
||||
aarch64-unknown-linux-gnu
|
||||
|
||||
cross_build_windows:
|
||||
name: Cross-Build-Windows
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, build]
|
||||
|
||||
steps:
|
||||
- name: Checkout Project
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- name: Crosscompile for targets
|
||||
uses: zijiren233/cargo-cross@v1
|
||||
with:
|
||||
targets: |
|
||||
x86_64-pc-windows-gnu
|
||||
|
||||
cross_Build_osx:
|
||||
name: Cross-Build-MacOS
|
||||
runs-on: ubuntu-latest
|
||||
needs: [lint, build]
|
||||
|
||||
steps:
|
||||
- name: Checkout Project
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
|
||||
# CrossCheck for MacOS first, which checks for a valid rust project on MacOS
|
||||
- name: Crosscheck for MacOS
|
||||
uses: zijiren233/cargo-cross@v1
|
||||
with:
|
||||
command: check
|
||||
targets: |
|
||||
aarch64-apple-darwin
|
||||
|
||||
|
||||
# MacOS is known for having a problematic linker step from linux, we should not fail the job if this fails, but this Workflow ALSO has the seperate cargo check
|
||||
- name: Crosscompile for targets
|
||||
continue-on-error: true
|
||||
uses: zijiren233/cargo-cross@v1
|
||||
with:
|
||||
targets: |
|
||||
aarch64-apple-darwin
|
||||
|
||||
test_linux:
|
||||
name: Test
|
||||
runs-on: ubuntu-latest
|
||||
needs: [build, lint]
|
||||
|
||||
steps:
|
||||
- name: Checkout Project
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Rust
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
with:
|
||||
targets: x86_64-unknown-linux-musl
|
||||
|
||||
- name: Test for Linux x86 (GNU and MUSL)
|
||||
run: |
|
||||
cargo test --target x86_64-unknown-linux-gnu --release --locked
|
||||
cargo test --target x86_64-unknown-linux-musl --release --locked
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
name: Release-plz
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, master]
|
||||
|
||||
jobs:
|
||||
|
||||
# Release unpublished packages.
|
||||
release-plz-release:
|
||||
name: Release-plz release
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: read
|
||||
|
||||
steps:
|
||||
|
||||
- &setup-git-user
|
||||
name: Config Git User
|
||||
run: |
|
||||
git config --global user.name "ci-bot"
|
||||
git config --global user.email "bot@email.melfely.com"
|
||||
|
||||
- &checkout
|
||||
name: Checkout repository
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 0
|
||||
persist-credentials: false
|
||||
|
||||
- &install-rust
|
||||
name: Install Rust toolchain
|
||||
uses: dtolnay/rust-toolchain@stable
|
||||
|
||||
- &install-cargo-semver
|
||||
name: Install Cargo SemVer Checks
|
||||
uses: taiki-e/install-action@fa23953489c080190314742a9b907f8e97c6767c # v2.87.10
|
||||
with:
|
||||
tool: cargo-semver-checks
|
||||
|
||||
- &install-release-plz
|
||||
name: Install release-plz
|
||||
uses: taiki-e/install-action@fa23953489c080190314742a9b907f8e97c6767c # v2.87.10
|
||||
with:
|
||||
tool: release-plz
|
||||
|
||||
|
||||
|
||||
- name: Run release-plz release
|
||||
run: |
|
||||
release-plz release --forge gitea --git-token ${{ secrets.GITEA_TOKEN }} --registry gitea --token "Bearer ${{ secrets.CARGO_REGISTRIES_GITEA_TOKEN }}"
|
||||
# Create a PR with the new versions and changelog, preparing the next releases
|
||||
release-plz-pr:
|
||||
name: Release-plz PR
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
|
||||
concurrency:
|
||||
group: release-plz-${{ github.ref }}
|
||||
cancel-in-progress: false
|
||||
|
||||
steps:
|
||||
- *setup-git-user
|
||||
- *checkout
|
||||
- *install-rust
|
||||
- *install-cargo-semver
|
||||
- *install-release-plz
|
||||
|
||||
- name: Fill Credentials
|
||||
run: |
|
||||
git config --global credential.helper store
|
||||
echo "https://ci-bot:${{ secrets.GITEA_TOKEN }}@gitea.melfely.com" > ~/.git-credentials
|
||||
|
||||
- name: Run release-plz release-pr
|
||||
run: |
|
||||
release-plz release-pr --forge gitea --git-token ${{ secrets.GITEA_TOKEN }} --registry gitea
|
||||
Generated
+9
-2
@@ -3,5 +3,12 @@
|
||||
version = 4
|
||||
|
||||
[[package]]
|
||||
name = "temp"
|
||||
version = "0.1.0"
|
||||
name = "example_bin"
|
||||
version = "0.1.1"
|
||||
dependencies = [
|
||||
"example_lib",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "example_lib"
|
||||
version = "0.1.1"
|
||||
|
||||
+3
-6
@@ -1,6 +1,3 @@
|
||||
[package]
|
||||
name = "temp"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["example_bin", "example_lib"]
|
||||
|
||||
@@ -1,3 +1,57 @@
|
||||
# rust_workflow_template
|
||||
# Rust Workspace Template with Pre-Configured Workflows
|
||||
|
||||
This Setup does ALOT of checking and analyis before letting you push to main/master. Requiring a massive amount of Cross-Platform support.
|
||||
|
||||
## Why?
|
||||
|
||||
This automates everything from linting, to CI/CD. This allows us to just work on projects, as long as we follow the rules, without having to worry about deployement.
|
||||
|
||||
Fully automating out an entire departement in most companies called DevOps.
|
||||
|
||||
**You just need to pay attention to the following**
|
||||
|
||||
## How to use properly.
|
||||
|
||||
This is an EXAMPLE workspace, look around at the how the Cargo.Toml files are setup, they are important. Once you get comfortable, delete the existing stuff, and start making your own.
|
||||
|
||||
A few major points.
|
||||
|
||||
### Git Commits
|
||||
|
||||
This uses a tool to auto generate change logs and version indexing. As LONG as you feed it good data, one of such requirements are good commits
|
||||
|
||||
This project **REQUIRES** you to use the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) format. This allows for a whole HOST of good automated tooling. That you will love, in comparison to doing it all by hand. WHILE adding a bit of a requirement to making good split up commits.
|
||||
|
||||
Any commits **not** following this standard should be rejected or reworded. If a commit is *to large* or some other problem to not fit the mold. Then change the commit, do **NOT** break the rules.
|
||||
|
||||
### Gitea Registry
|
||||
|
||||
We don't publish to crates.io, instead we publish to the pre-configured gitea crates repo. Which keeps everything private. Does have the disadvantage of reqiuring a bit of extra work to use.
|
||||
|
||||
In the example_bin Cargo.toml file you can see
|
||||
|
||||
```toml
|
||||
example_lib = { version = "0.1.1", path = "../example_lib", registry = "gitea" }
|
||||
```
|
||||
|
||||
This line is VERY important, it uses a PATH based dependency to find the project. Which allows for it to be live.
|
||||
|
||||
Note that the version number will need to be updated, along WITH the fact that you need to make sure that it uses the "gitea" regsitry here as well. That is where cargo will expect to find it at later.
|
||||
|
||||
### Workspace
|
||||
|
||||
in the root level Cargo.toml is the workspace config
|
||||
```toml
|
||||
[workspace]
|
||||
resolver = "3"
|
||||
members = ["example_bin", "example_lib"]
|
||||
```
|
||||
|
||||
notice how it LISTS all the crates that are members of the workspace? That is important!
|
||||
|
||||
### Cargo Lock files
|
||||
|
||||
All of the workflow tools remotely use --locked versions of cargo build and check, so therefore it **CANNOT** update the lock files.
|
||||
|
||||
The lock files are what versions of a package you are using when it was built. This is all about the philophsy of [reproducible builds](https://reproducible-builds.org/)
|
||||
|
||||
Rust Cargo Template with CI/CD Setup.
|
||||
@@ -0,0 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.1.1](https://gitea.melfely.com/melfely/rust_workflow_template/compare/example_bin-v0.1.0...example_bin-v0.1.1) - 2026-09-11
|
||||
|
||||
### Added
|
||||
|
||||
- bin example now references the local example_lib
|
||||
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "example_bin"
|
||||
version = "0.1.1"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
example_lib = { version = "0.1.0", path = "../example_lib", registry = "gitea" }
|
||||
@@ -0,0 +1,11 @@
|
||||
use example_lib::*;
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
|
||||
let result = add(1, 1);
|
||||
assert_eq!(result, 2);
|
||||
|
||||
let result = sub(1, 1);
|
||||
assert_eq!(result, 0);
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.1.1](https://gitea.melfely.com/melfely/rust_workflow_template/compare/example_lib-v0.1.0...example_lib-v0.1.1) - 2026-09-11
|
||||
|
||||
### Added
|
||||
|
||||
- added pub fn sub()
|
||||
@@ -0,0 +1,6 @@
|
||||
[package]
|
||||
name = "example_lib"
|
||||
version = "0.1.1"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
@@ -0,0 +1,20 @@
|
||||
pub fn add(left: u64, right: u64) -> u64 {
|
||||
left + right
|
||||
}
|
||||
|
||||
pub fn sub(left: u64, right: u64) -> u64 {
|
||||
left - right
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn it_works() {
|
||||
let result = add(2, 2);
|
||||
assert_eq!(result, 4);
|
||||
let result = sub(2, 2);
|
||||
assert_eq!(result, 0);
|
||||
}
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
pub fn two() -> i32 {
|
||||
2
|
||||
}
|
||||
Reference in New Issue
Block a user