feat: Create CI/CD

Signed-off-by: Awiteb <a@4rs.nl>
Reviewed-by: Amjad Alsharafi <me@amjad.alsharafi.dev>
This commit is contained in:
Awiteb 2024-07-06 15:51:59 +03:00
parent d442e73ed7
commit fcaf7db674
Signed by: awiteb
GPG key ID: 3F6B55640AA6682F
8 changed files with 283 additions and 0 deletions

View file

@ -0,0 +1,29 @@
---
name: Bug
about: Create a bug report to help us improve Oxidetalis
title: '...'
labels: ["Kind/Bug"]
assignees: ''
---
## Checks
* [ ] I added a descriptive title to this issue
* [ ] I have searched Google for similar issues and couldn't find anything
* [ ] I have read [the README](https://git.4rs.nl/oxidetalis/oxidetalis/src/branch/master/README.md) and still think this is a bug
## Version
<!-- Report for the bug only if it's present in the latest version of Oxidetalis.
If you are not using the latest version, please update and check if the bug is still present. -->
<!-- Run `oxidetalis --version` to get the version, and make sure it's the latest one -->
Oxidetalis version: `...`
## Description
<!-- A clear and concise description of what the bug is. -->
## Expected behavior
<!-- A clear and concise description of what you expected to happen. -->
## Actual behavior
<!-- A clear and concise description of what happens. -->

View file

@ -0,0 +1,10 @@
---
name: Feature request
about: Suggest an idea for Oxidetalis
title: '...'
labels: ["Kind/Feature"]
assignees: ''
---
## Feature description
<!-- A clear and concise description of what the feature is, and why you think it is needed. -->

View file

@ -0,0 +1,16 @@
---
name: Typo report
about: Report a typo in the documentation or the code
title: '...'
labels: ["Kind/Documentation"]
assignees: ''
---
<!--
For the location, please provide a link to the code or the documentation.
-->
| Location | Suggestion |
|----------|------------|
| Code-link| Suggestion |

View file

@ -0,0 +1,19 @@
## Summary
<!-- Please provide a brief description of the changes made in this PR -->
### Related issue
<!-- Mention any relevant issues like #123 -->
## Changes
<!-- Please provide some more detail regarding the changes.
Add any additional information, configuration, or data that might be necessary for the review
Mention the type of each change. i.e. `Addition`, `Bug Fix`, `Documentation`, etc... -->
## Checklist
- [ ] Added tests if applicable (for new features/regression/etc...)
- [ ] Documentation

114
.forgejo/workflows/cd.yml Normal file
View file

@ -0,0 +1,114 @@
name: CD
on:
push:
tags:
- v[0-9]+.[0-9]+.[0-9]+
- v[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+
jobs:
build-assets:
runs-on: debian
strategy:
matrix:
target:
- x86_64-unknown-linux-gnu
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
- aarch64-unknown-linux-musl
- x86_64-pc-windows-gnu
steps:
- uses: actions/checkout@v4
with:
ref: master
fetch-depth: 1
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.74
- name: Install musl-tools
run: |
apt-get update
apt-get install -y musl-tools
if: ${{ contains(matrix.target, 'musl') }}
- name: Install gcc-aarch64-linux-gnu linker
run: |
apt-get update
apt-get install -y gcc-aarch64-linux-gnu
if: ${{ contains(matrix.target, 'aarch64') }}
- name: Install gcc-mingw-w64 linker
run: |
apt-get update
apt-get install -y gcc-mingw-w64
if: ${{ contains(matrix.target, 'windows') }}
- name: Preparing the environment
run: |
BIN_NAME="$(echo $GITHUB_REPOSITORY | cut -d '/' -f 2)"
echo "BIN_NAME=$BIN_NAME" >> $GITHUB_ENV
mkdir -p release-dir
mkdir -p .cargo
echo 'target.aarch64-unknown-linux-gnu.linker = "aarch64-linux-gnu-gcc"' > .cargo/config.toml
echo 'target.aarch64-unknown-linux-musl.linker = "aarch64-linux-gnu-gcc"' >> .cargo/config.toml
- name: Install the target
run: rustup target install ${{ matrix.target }}
- name: Build the asset
run: |
TARGET=$(echo ${{ matrix.target }} | sed -e 's/-unknown//g' | sed -e 's/-pc//g')
APP_NAME="$BIN_NAME-$GITHUB_REF_NAME-$TARGET"
cargo clean
cargo build --release --target ${{ matrix.target }}
cp target/${{ matrix.target }}/release/$BIN_NAME.exe release-dir/$APP_NAME.exe || true
cp target/${{ matrix.target }}/release/$BIN_NAME release-dir/$APP_NAME || true
cd release-dir
test -f $APP_NAME && sha256sum $APP_NAME > $APP_NAME.sha256 || true
test -f $APP_NAME.exe && sha256sum $APP_NAME.exe > $APP_NAME.exe.sha256 || true
# Upload the artifact, so it can be used in the release step
- uses: actions/upload-artifact@v3
with:
name: ${{ env.GITHUB_SHA }}-${{ env.GITHUB_RUN_NUMBER }}
path: ${{ env.GITHUB_WORKSPACE }}/release-dir
release:
needs: build-assets
runs-on: debian
steps:
- uses: actions/checkout@v4
with:
ref: master
fetch-depth: 0
fetch-tags: true
- uses: actions/download-artifact@v3
with:
name: ${{ env.GITHUB_SHA }}-${{ env.GITHUB_RUN_NUMBER }}
path: ${{ env.GITHUB_WORKSPACE }}/release-dir
- name: Install git-cliff
run: |
version="2.4.0"
wget "https://github.com/orhun/git-cliff/releases/download/v$version/git-cliff-$version-x86_64-unknown-linux-gnu.tar.gz"
tar -xvzf git-cliff-*.tar.gz
mv "git-cliff-$version/git-cliff" /usr/local/bin
rm -fr git-cliff-*
- name: Write changelog
run: |
git config user.name forgejo-actions
git config user.email forgejo-actions@noreply.localhost
echo 'TAG_CHANGELOG=$(if [[ $(git tag --sort=committerdate | tail -n 1) == *"-rc"* ]]; then git-cliff --strip all $(git tag --sort=committerdate | tail -n 2 | sed ":a; N; $!ba; s/\n/../g") | sed "s/## unreleased.*$//g"; else git-cliff -l --strip all | sed "s/^## \[.*$//g";fi)' | sed "s/\"/'/g" >> $GITHUB_ENV
if [[ $(git tag --sort=creatordate | tail -n 1) != *'-rc'* ]]; then
echo "The latest tag is not a release candidate, updating changelog for $GITHUB_REF_NAME"
git-cliff > CHANGELOG.md
git add CHANGELOG.md
git commit -m "Update changelog for $GITHUB_REF_NAME"
git push
echo "Changelog updated"
else
echo "The latest tag is a release candidate, not updating changelog"
fi
- name: Create Release
uses: actions/forgejo-release@v1
with:
direction: upload
url: https://git.4rs.nl
token: ${{ env.GITHUB_TOKEN }}
release-dir: release-dir
release-notes: ${{ env.TAG_CHANGELOG }}
prerelease: ${{ contains(env.GITHUB_REF_NAME, '-rc') }}

View file

@ -0,0 +1,36 @@
name: Write changelog
on:
push:
branches:
- 'master'
jobs:
write-changelog:
runs-on: debian
steps:
- uses: actions/checkout@v4
with:
ref: master
fetch-depth: 0
fetch-tags: true
- name: Install git-cliff
run: |
version="2.4.0"
wget "https://github.com/orhun/git-cliff/releases/download/v$version/git-cliff-$version-x86_64-unknown-linux-gnu.tar.gz"
tar -xvzf git-cliff-*.tar.gz
mv "git-cliff-$version/git-cliff" /usr/local/bin
rm -fr git-cliff-*
- name: Write changelog
run: |
git config user.name forgejo-actions
git config user.email forgejo-actions@noreply.localhost
git-cliff > CHANGELOG.md
if [[ $(git status | grep --extended-regexp '^\s+modified:\s+CHANGELOG.md$') ]]; then
git add CHANGELOG.md
git commit -m "chore(changelog): Update changelog"
git push
echo "Changelog updated"
else
echo "No changes to changelog"
fi

25
.forgejo/workflows/ci.yml Normal file
View file

@ -0,0 +1,25 @@
name: Rust CI
on:
push:
branches: [master]
pull_request:
branches: [master]
jobs:
rust_ci:
name: Rust CI
runs-on: debian
steps:
- uses: actions/checkout@v4
- uses: https://codeberg.org/TheAwiteb/rust-action@v1.76
- name: Check MSRV
run: cargo +1.76 build
- name: Build the source code
run: cargo build
- name: Check the code format
run: cargo fmt -- --check
- name: Run cargo-check
run: cargo check
- name: Run cargo-clippy
run: cargo clippy -- -D warnings

34
.github/workflows/auto_close_pr.yml vendored Normal file
View file

@ -0,0 +1,34 @@
name: Auto close PR
on:
pull_request:
types: [opened, reopened]
jobs:
close_pr:
name: Auto close PR
runs-on: ubuntu-latest
steps:
- name: Send close comment
run: |
curl -L \
-X POST \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $PAT" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.number }}/comments \
-d '{"body":"${{ env.BODY }}"}'
env:
PAT: ${{ secrets.PAT }}
BODY: This repository is mirror only and you cannot create a pull request for it. Please open your PR in https://git.4rs.nl/oxidetalis/oxidetalis
- name: Close the PR
run: |
curl -L \
-X PATCH \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $PAT" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/repos/${{ github.repository }}/pulls/${{ github.event.number }} \
-d '{"state":"closed"}'
env:
PAT: ${{ secrets.PAT }}