Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 81 additions & 22 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,71 +9,130 @@ permissions:
contents: write

jobs:
check:
name: Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5

- name: Cache cargo registry
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-${{ matrix.target }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo index
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-${{ matrix.target }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo build
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: target
key: ${{ runner.os }}-${{ matrix.target }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

- name: Install required tools
uses: jdx/mise-action@e3d7b8d67a7958d1207f6ed871e83b1ea780e7b0 # v3.3.1

- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt, clippy

- name: Check formatting
run: cargo fmt --check

- name: Run clippy
run: cargo clippy --all-targets --all-features -- -D warnings

- name: Run tests
run: cargo nextest run --profile ci

build-release-artifacts:
name: Build release artifacts
needs: check
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
use-cross: false
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
use-cross: true
- os: macos-latest
target: x86_64-apple-darwin
use-cross: false
- os: macos-latest
target: aarch64-apple-darwin
use-cross: false
- os: windows-latest
target: x86_64-pc-windows-msvc
use-cross: false
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5

- name: Install required tools
uses: jdx/mise-action@e3d7b8d67a7958d1207f6ed871e83b1ea780e7b0 # v3.3.1

- name: Cache cargo registry
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.cargo/registry
key: ${{ runner.os }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-${{ matrix.target }}-cargo-registry-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo index
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: ~/.cargo/git
key: ${{ runner.os }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-${{ matrix.target }}-cargo-index-${{ hashFiles('**/Cargo.lock') }}

- name: Cache cargo build
uses: actions/cache@0057852bfaa89a56745cba8c7296529d2fc39830 # v4
with:
path: target
key: ${{ runner.os }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}
key: ${{ runner.os }}-${{ matrix.target }}-cargo-build-target-${{ hashFiles('**/Cargo.lock') }}

- name: Install ${{ matrix.target }} toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}

- name: Install cross-compilation tools
if: matrix.target == 'aarch64-unknown-linux-gnu'
run: |
sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu

- name: Check formatting
run: cargo fmt --check
- name: Install cross
if: matrix.use-cross
run: cargo install cross --git https://github.com/cross-rs/cross

- name: Run clippy
run: cargo clippy -- -D warnings
- name: Build release binary
run: |
if [ "${{ matrix.use-cross }}" == "true" ]; then
cross build --release --locked --target ${{ matrix.target }}
else
cargo build --release --locked --target ${{ matrix.target }}
fi
shell: bash

- name: Run tests
run: cargo nextest run --profile ci --target ${{ matrix.target }}
- name: Prepare binary (Unix)
if: runner.os != 'Windows'
run: |
cd target/${{ matrix.target }}/release
mv mk mk-0.5.4-${{ matrix.target }}

- name: Build release binary
- name: Prepare binary (Windows)
if: runner.os == 'Windows'
run: |
cargo build --release --locked --target ${{ matrix.target }}
mv target/${{ matrix.target }}/release/mk target/${{ matrix.target }}/release/mk-${GITHUB_REF_NAME#v}-${{ matrix.target }}
cd target/${{ matrix.target }}/release
mv mk.exe mk-0.5.4-${{ matrix.target }}.exe
shell: bash

- name: Upload Release Artifact
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: gh release upload ${{ github.ref_name }} ./target/${{ matrix.target }}/release/mk-${GITHUB_REF_NAME#v}-${{ matrix.target }}
run: |
if [ "${{ runner.os }}" == "Windows" ]; then
gh release upload v0.5.4 ./target/${{ matrix.target }}/release/mk-0.5.4-${{ matrix.target }}.exe
else
gh release upload v0.5.4 ./target/${{ matrix.target }}/release/mk-0.5.4-${{ matrix.target }}
fi
shell: bash
3 changes: 0 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,3 @@ serial_test = "=3.2.0"
strip = true
lto = true
codegen-units = 1

[target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc"
2 changes: 1 addition & 1 deletion mise.toml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ run = "cargo build --release --locked"
run = "cargo install --path . --force"

[tasks.test]
run = "cargo clippy -- -D warnings && cargo nextest run"
run = "cargo clippy --all-targets --all-features -- -D warnings && cargo nextest run"

[tasks.coverage]
run = "cargo tarpaulin --out Html"
18 changes: 9 additions & 9 deletions tests/ansible_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ fn create_ansible_project(temp_dir: &TempDir, env: &str) -> String {

fs::write(
inventories_dir.join(format!("{}.yml", env)),
format!("all:\\n hosts:\\n server1:\\n ansible_host: 10.0.0.1\\n"),
"all:\\n hosts:\\n server1:\\n ansible_host: 10.0.0.1\\n",
)
.unwrap();

Expand All @@ -49,7 +49,7 @@ fn test_ansible_list_command() {
Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["list", ".", "dev"])
.args(["list", ".", "dev"])
.assert()
.success();
}
Expand All @@ -70,7 +70,7 @@ fn test_ansible_list_with_environment() {
let output = Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["list", ".", "dev"])
.args(["list", ".", "dev"])
.output()
.unwrap();

Expand All @@ -85,7 +85,7 @@ fn test_ansible_list_invalid_environment() {
Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["list", ".", "nonexistent"])
.args(["list", ".", "nonexistent"])
.assert()
.failure()
.stderr(predicate::str::contains("not found").or(predicate::str::contains("Invalid")));
Expand All @@ -99,7 +99,7 @@ fn test_ansible_list_shows_command() {
let output = Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["list", ".", "dev"])
.args(["list", ".", "dev"])
.output()
.unwrap();

Expand All @@ -118,7 +118,7 @@ fn test_ansible_apply_command() {
let output = Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["apply", ".", "dev"])
.args(["apply", ".", "dev"])
.output()
.unwrap();

Expand All @@ -139,7 +139,7 @@ fn test_ansible_apply_with_check_option() {
let output = Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["apply", ".", "dev", "--", "--check"])
.args(["apply", ".", "dev", "--", "--check"])
.output()
.unwrap();

Expand All @@ -161,7 +161,7 @@ fn test_ansible_not_in_ansible_directory() {
Command::cargo_bin("mk")
.unwrap()
.current_dir(temp_dir.path())
.args(&["list", ".", "dev"])
.args(["list", ".", "dev"])
.assert()
.failure()
.stderr(
Expand Down Expand Up @@ -190,7 +190,7 @@ fn test_ansible_multiple_environments_available() {
let output = Command::cargo_bin("mk")
.unwrap()
.current_dir(&project_path)
.args(&["list", ".", "dev"])
.args(["list", ".", "dev"])
.output()
.unwrap();

Expand Down
2 changes: 1 addition & 1 deletion tests/bump_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ resource "google_compute_network" "vpc" {

// Run bump command
let mut cmd = Command::cargo_bin("mk").unwrap();
cmd.current_dir(&project_dir)
cmd.current_dir(project_dir)
.arg("bump")
.arg(".")
.arg("--verbose");
Expand Down
Loading