Skip to content

Commit

Permalink
feat: Dockerisation, CI and doc update
Browse files Browse the repository at this point in the history
Signed-off-by: Martin Olivier <[email protected]>
  • Loading branch information
martin-olivier committed Mar 7, 2024
1 parent e64aa3a commit 6b985a5
Show file tree
Hide file tree
Showing 8 changed files with 119 additions and 100 deletions.
Binary file modified .github/assets/example.gif
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion .github/dependabot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "monthly"
interval: "daily"
152 changes: 70 additions & 82 deletions .github/workflows/CI.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,145 +11,133 @@ jobs:
name: commits
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: webiny/action-conventional-commits@v1.1.0
- uses: actions/checkout@v4
- uses: webiny/action-conventional-commits@v1.3.0

linter:
name: linter
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v3
- name: Create builder image
run: docker build . -t vangelis_builder

- name: Clippy
run: cargo clippy --all --all-features -- -D warnings
run: >
docker run --rm
-v ${{ github.workspace }}:/workspace
vangelis_builder
cargo clippy --all --all-features -- -D warnings
- name: Format
run: cargo fmt --all -- --check
run: >
docker run --rm
-v ${{ github.workspace }}:/workspace
vangelis_builder
cargo fmt --all -- --check
linux:
name: linux (${{ matrix.arch_name }})
name: linux (${{ matrix.arch }})
runs-on: ubuntu-latest
permissions: write-all
needs: linter
strategy:
fail-fast: false
matrix:
arch: [x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu]
arch: [x86_64, aarch64]
include:
- arch: x86_64-unknown-linux-gnu
arch_name: x86_64
compiler: gcc-aarch64-linux-gnu
- arch: aarch64-unknown-linux-gnu
arch_name: aarch64
compiler: gcc-aarch64-linux-gnu
- arch: x86_64
target: x86_64-unknown-linux-gnu
- arch: aarch64
target: aarch64-unknown-linux-gnu

steps:
- uses: actions/checkout@v3

- name: Install toolchain
run: rustup target add ${{ matrix.arch }}
- uses: actions/checkout@v4

- name: Install build dependencies
- name: Create builder image
run: >
sudo apt update && sudo apt install -y
${{ matrix.compiler }}
ruby
ruby-dev
rubygems
rpm
libarchive-tools
- name: Install fpm
run: sudo gem install fpm
docker build .
-t vangelis_builder
- name: Build binary
run: cargo build --release --target=${{ matrix.arch }}

- name: Get binary
run: cp target/${{ matrix.arch }}/release/vangelis .

- name: Build debian package
run: fpm -t deb -p vangelis-debian-${{ matrix.arch_name }}.deb --architecture ${{ matrix.arch }}
- name: Build project
run: >
docker run --rm
-v ${{ github.workspace }}:/workspace
-e ARCH_NAME=${{ matrix.arch }}
-e TARGET_ARCH=${{ matrix.target }}
vangelis_builder
- name: Save debian artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: vangelis-debian-${{ matrix.arch_name }}.deb
path: ./vangelis-debian-${{ matrix.arch_name }}.deb
name: vangelis-debian-${{ matrix.arch }}.deb
path: ./vangelis-debian-${{ matrix.arch }}.deb
if-no-files-found: error

- name: Build redhat package
run: fpm -t rpm -p vangelis-redhat-${{ matrix.arch_name }}.rpm --architecture ${{ matrix.arch }}

- name: Save redhat artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: vangelis-redhat-${{ matrix.arch_name }}.rpm
path: ./vangelis-redhat-${{ matrix.arch_name }}.rpm
name: vangelis-redhat-${{ matrix.arch }}.rpm
path: ./vangelis-redhat-${{ matrix.arch }}.rpm
if-no-files-found: error

- name: Build archlinux package
run: fpm -t pacman -p vangelis-archlinux-${{ matrix.arch_name }}.pkg.tar.zst --architecture ${{ matrix.arch }}

- name: Save archlinux artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: vangelis-archlinux-${{ matrix.arch_name }}.pkg.tar.zst
path: ./vangelis-archlinux-${{ matrix.arch_name }}.pkg.tar.zst
name: vangelis-archlinux-${{ matrix.arch }}.pkg.tar.zst
path: ./vangelis-archlinux-${{ matrix.arch }}.pkg.tar.zst
if-no-files-found: error

- name: Upload packages
if: github.event_name == 'release'
uses: softprops/action-gh-release@v1
with:
files: |
./vangelis-debian-${{ matrix.arch_name }}.deb
./vangelis-redhat-${{ matrix.arch_name }}.rpm
./vangelis-archlinux-${{ matrix.arch_name }}.pkg.tar.zst
./vangelis-debian-${{ matrix.arch }}.deb
./vangelis-redhat-${{ matrix.arch }}.rpm
./vangelis-archlinux-${{ matrix.arch }}.pkg.tar.zst
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

mac_os:
name: macOS (${{ matrix.arch_name }})
name: macOS (${{ matrix.arch }})
runs-on: macos-latest
permissions: write-all
needs: linter
strategy:
fail-fast: false
matrix:
arch: [x86_64-apple-darwin, aarch64-apple-darwin]
arch: [intel, silicon]
include:
- arch: x86_64-apple-darwin
arch_name: intel
- arch: aarch64-apple-darwin
arch_name: silicon
- arch: intel
target: x86_64-apple-darwin
- arch: silicon
target: aarch64-apple-darwin

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Install toolchain
run: rustup target add ${{ matrix.arch }}
run: rustup target add ${{ matrix.target }}

- name: Build binary
run: cargo build --release --target=${{ matrix.arch }}
run: cargo build --release --target=${{ matrix.target }}

- name: Save artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: vangelis-macos-${{ matrix.arch_name }}
path: target/${{ matrix.arch }}/release/vangelis
name: vangelis-macos-${{ matrix.arch }}
path: target/${{ matrix.target }}/release/vangelis
if-no-files-found: error

- name: Set binary name
if: github.event_name == 'release'
run: cp target/${{ matrix.arch }}/release/vangelis vangelis-macos-${{ matrix.arch_name }}
run: cp target/${{ matrix.target }}/release/vangelis vangelis-macos-${{ matrix.arch }}

- name: Upload binary
if: github.event_name == 'release'
uses: softprops/action-gh-release@v1
with:
files: vangelis-macos-${{ matrix.arch_name }}
files: vangelis-macos-${{ matrix.arch }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

Expand All @@ -161,37 +149,37 @@ jobs:
strategy:
fail-fast: false
matrix:
arch: [x86_64-pc-windows-msvc, aarch64-pc-windows-msvc]
arch: [x86_64, aarch64]
include:
- arch: x86_64-pc-windows-msvc
arch_name: x86_64
- arch: aarch64-pc-windows-msvc
arch_name: aarch64
- arch: x86_64
target: x86_64-pc-windows-msvc
- arch: aarch64
target: aarch64-pc-windows-msvc

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- name: Install toolchain
run: rustup target add ${{ matrix.arch }}
run: rustup target add ${{ matrix.target }}

- name: Build binary
run: cargo build --release --target=${{ matrix.arch }}
run: cargo build --release --target=${{ matrix.target }}

- name: Save artifact
uses: actions/upload-artifact@v3
uses: actions/upload-artifact@v4
with:
name: vangelis-windows-${{ matrix.arch_name }}.exe
path: target/${{ matrix.arch }}/release/vangelis.exe
name: vangelis-windows-${{ matrix.arch }}.exe
path: target/${{ matrix.target }}/release/vangelis.exe
if-no-files-found: error

- name: Set binary name
if: github.event_name == 'release'
run: cp target/${{ matrix.arch }}/release/vangelis.exe vangelis-windows-${{ matrix.arch_name }}.exe
run: cp target/${{ matrix.target }}/release/vangelis.exe vangelis-windows-${{ matrix.arch }}.exe

- name: Upload binary
if: github.event_name == 'release'
uses: softprops/action-gh-release@v1
with:
files: vangelis-windows-${{ matrix.arch_name }}.exe
files: vangelis-windows-${{ matrix.arch }}.exe
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
24 changes: 12 additions & 12 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ repository = "https://github.com/martin-olivier/vangelis"
documentation = "https://github.com/martin-olivier/vangelis"
keywords = ["testing", "test", "config", "command", "process"]
categories = ["development-tools", "command-line-utilities"]
exclude = ["/.github", "/examples"]
exclude = ["/.github", "/examples", "Dockerfile"]
readme = "README.md"

[dependencies]
clap = { version = "4.4", features = ["derive"] }
clap = { version = "4.5", features = ["derive"] }
serde = { version = "1", features = ["derive"] }
indexmap = { version = "2", features = ["serde"] }
term_size = "0.3"
Expand Down
33 changes: 33 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
FROM rust:1.75.0-slim-bookworm

# Define a build argument to specify the target architecture (defaulting to "x86_64-unknown-linux-gnu")
ARG ARCH_NAME=x86_64
ARG TARGET_ARCH=x86_64-unknown-linux-gnu

# Fetch package list
RUN apt update

# Install cross-compilation tools
RUN apt install -y gcc gcc-aarch64-linux-gnu

# Install packaging tools
RUN apt install -y build-essential ruby ruby-dev rubygems rpm zstd libarchive-tools

# Install fpm
RUN gem install fpm

# Install rustup components
RUN rustup component add clippy
RUN rustup component add rustfmt

##### Commands #####

WORKDIR /workspace

# Build and package the project
CMD rustup target add $TARGET_ARCH && \
cargo build --release --target $TARGET_ARCH && \
cp target/$TARGET_ARCH/release/vangelis . && \
fpm -f -t deb -p vangelis-debian-$ARCH_NAME.deb -a $ARCH_NAME && \
fpm -f -t rpm -p vangelis-redhat-$ARCH_NAME.rpm -a $ARCH_NAME && \
fpm -f -t pacman -p vangelis-archlinux-$ARCH_NAME.pkg.tar.zst -a $ARCH_NAME
2 changes: 1 addition & 1 deletion LICENSE
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
MIT License

Copyright (c) 2023 Martin Olivier
Copyright (c) 2024 Martin Olivier

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
Expand Down
Loading

0 comments on commit 6b985a5

Please sign in to comment.