Skip to content

Commit

Permalink
Merge pull request #24 from X1r0z/feature/github-actions
Browse files Browse the repository at this point in the history
chore: add GitHub Actions workflow
  • Loading branch information
X1r0z authored Dec 26, 2024
2 parents 8e5c6f5 + 25cf3cd commit 83a8d6f
Show file tree
Hide file tree
Showing 4 changed files with 223 additions and 2 deletions.
119 changes: 119 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
name: Rust Build and Release

on:
push:
tags:
- "*"

jobs:
build:
name: Build and Release
runs-on: ${{ matrix.os }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
- os: macos-latest
target: x86_64-apple-darwin
- os: macos-latest
target: aarch64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Setup Rust environment
uses: dtolnay/rust-toolchain@stable
with:
target: ${{ matrix.target }}

- name: Install UPX (on Windows)
if: matrix.os == 'windows-latest'
run: |
choco install upx
- name: Build the project
run: |
cargo build --release --target ${{ matrix.target }}
- name: Compress binary with UPX (on Linux)
if: matrix.os == 'ubuntu-latest'
run: |
upx --best --lzma target/${{ matrix.target }}/release/pivot -o target/${{ matrix.target }}/release/pivot_upx
- name: Compress binary with UPX (on Windows)
if: matrix.os == 'windows-latest'
run: |
upx --best --lzma target/${{ matrix.target }}/release/pivot.exe -o target/${{ matrix.target }}/release/pivot_upx.exe
- name: Prepare artifacts (on Unix)
if: matrix.os != 'windows-latest'
run: |
mkdir artifacts
cp target/${{ matrix.target }}/release/pivot artifacts/
if [ -f target/${{ matrix.target }}/release/pivot_upx ]; then
cp target/${{ matrix.target }}/release/pivot_upx artifacts/
fi
cp README*.md artifacts/
cp LICENSE artifacts/
- name: Prepare artifacts (on Windows)
if: matrix.os == 'windows-latest'
run: |
mkdir artifacts
cp target/${{ matrix.target }}/release/pivot.exe artifacts/
cp target/${{ matrix.target }}/release/pivot_upx.exe artifacts/
cp README*.md artifacts/
cp LICENSE artifacts/
- name: Package artifacts (on Unix)
if: matrix.os != 'windows-latest'
run: |
tar -czvf pivot-${{ matrix.target }}.tar.gz artifacts/*
- name: Package artifacts (on Windows)
if: matrix.os == 'windows-latest'
run: |
7z a pivot-${{ matrix.target }}.zip artifacts\*
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: pivot-${{ matrix.target }}
path: |
pivot-${{ matrix.target }}.${{ matrix.os == 'windows-latest' && 'zip' || 'tar.gz' }}
release:
name: Create Release
runs-on: ubuntu-latest
needs: build
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Download artifacts
uses: actions/download-artifact@v4
with:
path: release_artifacts
pattern: pivot-*
merge-multiple: true

- name: Generate changelog
uses: orhun/git-cliff-action@v4
with:
args: -v --current --strip all
env:
OUTPUT: CHANGELOG.md
GITHUB_REPO: ${{ github.repository }}

- name: Upload binary releases
uses: softprops/action-gh-release@v2
with:
body_path: CHANGELOG.md
files: |
release_artifacts/*
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,16 @@

## Build

The project is under development, so you need to build yourself.
The project currently only releases binaries for the following architectures (based on GitHub Actions):

- x86_64-unknown-linux-gnu
- x86_64-apple-darwin
- aarch64-apple-darwin
- x86_64-pc-windows-msvc

*`x86_64-unknown-linux-gnu` and `x86_64-pc-windows-msvc` will have an additional UPX compressed binary file*

If the architecture you need is not in the list above, you can build it yourself.

```bash
git clone https://github.com/X1r0z/pivot-rs
Expand Down
11 changes: 10 additions & 1 deletion README.zh.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,16 @@

## 构建

项目目前还在开发中, 所以你需要自行构建.
项目目前仅发布如下架构的二进制文件 (基于 GitHub Actions):

- x86_64-unknown-linux-gnu
- x86_64-apple-darwin
- aarch64-apple-darwin
- x86_64-pc-windows-msvc

*其中 `x86_64-unknown-linux-gnu``x86_64-pc-windows-msvc` 会另外附加一份 UPX 压缩过后的二进制文件*

如果你需要的架构不在上面的列表中, 你可以自行构建.

```bash
git clone https://github.com/X1r0z/pivot-rs
Expand Down
84 changes: 84 additions & 0 deletions cliff.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
# git-cliff ~ default configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.

[changelog]
# template for the changelog header
header = """
# Changelog\n
All notable changes to this project will be documented in this file.\n
"""
# template for the changelog body
# https://keats.github.io/tera/docs/#introduction
body = """
{% if version %}\
## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
## [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}
- {% if commit.scope %}*({{ commit.scope }})* {% endif %}\
{% if commit.breaking %}[**breaking**] {% endif %}\
{{ commit.message | upper_first }} ([{{ commit.id | truncate(length=7, end="") }}]({{ commit.id }}))\
{% endfor %}
{% endfor %}\n
"""
# template for the changelog footer
footer = """
<!-- generated by git-cliff -->
"""
# remove the leading and trailing s
trim = true
# postprocessors
postprocessors = [
# { pattern = '<REPO>', replace = "https://github.com/orhun/git-cliff" }, # replace repository URL
]
# render body even when there are no releases to process
# render_always = true
# output file path
# output = "test.md"

[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# process each line of a commit as an individual commit
split_commits = false
# regex for preprocessing the commit messages
commit_preprocessors = [
# Replace issue numbers
#{ pattern = '\((\w+\s)?#([0-9]+)\)', replace = "([#${2}](<REPO>/issues/${2}))"},
# Check spelling of the commit with https://github.com/crate-ci/typos
# If the spelling is incorrect, it will be automatically fixed.
#{ pattern = '.*', replace_command = 'typos --write-changes -' },
]
# regex for parsing and grouping commits
commit_parsers = [
{ message = "^feat", group = "<!-- 0 -->🚀 Features" },
{ message = "^fix", group = "<!-- 1 -->🐛 Bug Fixes" },
{ message = "^doc", group = "<!-- 3 -->📚 Documentation" },
{ message = "^perf", group = "<!-- 4 -->⚡ Performance" },
{ message = "^refactor", group = "<!-- 2 -->🚜 Refactor" },
{ message = "^style", group = "<!-- 5 -->🎨 Styling" },
{ message = "^test", group = "<!-- 6 -->🧪 Testing" },
{ message = "^chore\\(release\\): prepare for", skip = true },
{ message = "^chore\\(deps.*\\)", skip = true },
{ message = "^chore\\(pr\\)", skip = true },
{ message = "^chore\\(pull\\)", skip = true },
{ message = "^chore|^ci", group = "<!-- 7 -->⚙️ Miscellaneous Tasks" },
{ body = ".*security", group = "<!-- 8 -->🛡️ Security" },
{ message = "^revert", group = "<!-- 9 -->◀️ Revert" },
{ message = ".*", group = "<!-- 10 -->💼 Other" },
]
# filter out the commits that are not matched by commit parsers
filter_commits = false
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"

0 comments on commit 83a8d6f

Please sign in to comment.