12 Commits
Author SHA1 Message Date
melfely 9ac27dc546 fixes: Fixed Ordering of CLI args in build.
Crossplatform Linting && Build / Linting (push) Successful in 1m15s
Crossplatform Linting && Build / Build (push) Failing after 1m30s
I had ordered the CLI arguments in the build script incorrectly, which caused... issues.
2026-09-08 17:59:23 -05:00
melfely 7fbc05d521 fixes: readded x86-64 musl linux target
Crossplatform Linting && Build / Build (push) Failing after 1m30s
Crossplatform Linting && Build / Linting (push) Successful in 1m28s
2026-09-08 17:49:26 -05:00
melfely d2f008ad5f fixes: Removes Windows and Mac Builds. Replaces build with cross for non-native builds
Apparently Cross Compiling to MacOS is basically impossible.

Crossing Compiling to Windows is painful but doable, not setting it up here ngl
2026-09-08 17:46:39 -05:00
melfely 8de78b6e1a fixes: Cargo.Lock file update to date
Crossplatform Linting && Build / Linting (push) Successful in 1m30s
Crossplatform Linting && Build / Build (push) Failing after 1m18s
2026-09-08 17:25:23 -05:00
melfely 2846cdbcc5 fixes: Removed Linting of multiple targets.
Crossplatform Linting && Build / Linting (push) Successful in 1m22s
Crossplatform Linting && Build / Build (push) Failing after 1m13s
Fixes improper target for build of aarch-64 to aarch64
2026-09-08 17:16:38 -05:00
melfely 16d0a21b8c fixes: Installs Missing Cargo Clippy for Linting
Crossplatform Linting && Build / Linting (push) Failing after 1m40s
Crossplatform Linting && Build / Build (push) Skipped
2026-09-08 17:12:12 -05:00
melfely 864ff9f044 fixes: Installes Required rustfmt
Crossplatform Linting && Build / Linting (push) Failing after 1m45s
Crossplatform Linting && Build / Build (push) Skipped
2026-09-08 17:08:01 -05:00
melfely c45bc81bf8 fixes: Fixed x86-64 to the correct x86_64 for --target
Crossplatform Linting && Build / Linting (push) Failing after 2m39s
Crossplatform Linting && Build / Build (push) Skipped
2026-09-08 17:03:23 -05:00
melfely 123c9a1da8 fixes: Fixed the build job not requiring the lint job to complete first 2026-09-08 17:01:30 -05:00
melfely f2c0af5775 feat: Added base level rust project.
Crossplatform Linting && Build / Build (push) Failing after 56s
Crossplatform Linting && Build / Linting (push) Failing after 1m0s
2026-09-08 16:59:26 -05:00
melfely b408028c87 fix: fixed a issue with the syntax of the lint.yml file
Reworked the multiple line linux builds and lints(since they build both musl and gnu)
2026-09-08 16:46:32 -05:00
melfely 5a4191bb60 feat: Added lint.yml which tests for linting and build on multiple platforms 2026-09-08 16:43:50 -05:00
13 changed files with 65 additions and 323 deletions
-2
View File
@@ -1,2 +0,0 @@
[registries.gitea]
index = "sparse+https://gitea.melfely.com/api/packages/crates/cargo/"
+49 -97
View File
@@ -1,4 +1,4 @@
name: Lint & Build name: Crossplatform Linting && Build
on: on:
push: push:
@@ -15,25 +15,42 @@ jobs:
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Setup Rust - name: Setup Rust
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@1.90.0
with:
components: rustfmt, clippy - name: Install cargo fmt
run: rustup component add rustfmt
- name: Install cargo clippy
run: rustup component add clippy
- name: Install cargo sort - name: Install cargo sort
uses: taiki-e/install-action@v2 uses: taiki-e/cache-cargo-install-action@caa6f48d18d42462f9c30df89e2b4f71a42b7c2c # v2.0.1
with: with:
tool: cargo-sort tool: cargo-sort@1.0.9
- name: Install cargo machete - name: Install cargo machete
uses: taiki-e/install-action@v2 uses: taiki-e/cache-cargo-install-action@caa6f48d18d42462f9c30df89e2b4f71a42b7c2c # v2.0.1
with: with:
tool: cargo-machete tool: cargo-machete@0.7.0
- name: Cache cargo dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-lint-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-lint-
- name: Check formatting - name: Check formatting
run: cargo fmt --check run: cargo fmt --check
- name: Check import sorting - name: Check import sorting
run: cargo sort --workspace --grouped --check --check-format run: cargo sort --grouped --check --check-format
- name: Check for unused dependencies - name: Check for unused dependencies
run: cargo machete run: cargo machete
@@ -51,100 +68,35 @@ jobs:
uses: actions/checkout@v5 uses: actions/checkout@v5
- name: Setup Rust - name: Setup Rust
uses: dtolnay/rust-toolchain@stable uses: dtolnay/rust-toolchain@1.90.0
with: with:
targets: x86_64-unknown-linux-musl targets: x86_64-unknown-linux-musl
- name: Install Cross
run: cargo install cross --locked
- name: Cache cargo dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-lint-${{ hashFiles('**/Cargo.lock') }}
restore-keys: |
${{ runner.os }}-cargo-lint-
- name: Build for Linux x86 (GNU and MUSL) - name: Build for Linux x86 (GNU and MUSL)
run: | run: |
cargo build --target x86_64-unknown-linux-gnu --release --locked cargo build --release --target x86_64-unknown-linux-gnu --locked
cargo build --target x86_64-unknown-linux-musl --release --locked cargo build --release --target x86_64-unknown-linux-musl --locked
- name: Build for Linux aarch64 (GNU and MUSL)
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: | run: |
cargo test --target x86_64-unknown-linux-gnu --release --locked cargo cross --release --target aarch64-unknown-linux-gnu --locked
cargo test --target x86_64-unknown-linux-musl --release --locked cargo cross --release --target aarch64-unknown-linux-musl --locked
-81
View File
@@ -1,81 +0,0 @@
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
+2 -9
View File
@@ -3,12 +3,5 @@
version = 4 version = 4
[[package]] [[package]]
name = "example_bin" name = "temp"
version = "0.1.1" version = "0.1.0"
dependencies = [
"example_lib",
]
[[package]]
name = "example_lib"
version = "0.1.1"
+6 -3
View File
@@ -1,3 +1,6 @@
[workspace] [package]
resolver = "3" name = "temp"
members = ["example_bin", "example_lib"] version = "0.1.0"
edition = "2024"
[dependencies]
+2 -56
View File
@@ -1,57 +1,3 @@
# Rust Workspace Template with Pre-Configured Workflows # rust_workflow_template
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.
-14
View File
@@ -1,14 +0,0 @@
# 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
-7
View File
@@ -1,7 +0,0 @@
[package]
name = "example_bin"
version = "0.1.1"
edition = "2024"
[dependencies]
example_lib = { version = "0.1.0", path = "../example_lib", registry = "gitea" }
-11
View File
@@ -1,11 +0,0 @@
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);
}
-14
View File
@@ -1,14 +0,0 @@
# 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()
-6
View File
@@ -1,6 +0,0 @@
[package]
name = "example_lib"
version = "0.1.1"
edition = "2024"
[dependencies]
-20
View File
@@ -1,20 +0,0 @@
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);
}
}
+3
View File
@@ -0,0 +1,3 @@
fn main() {
println!("Hello, world!");
}