feat: Create CI/CD #9

Merged
awiteb merged 3 commits from awiteb/ci-cd into master 2024-07-07 20:00:25 +02:00 AGit
10 changed files with 294 additions and 5 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
awiteb marked this conversation as resolved
Review

the PR template seems that its for bug fixes only, I would modify it to make it general, this is an example of what I use

## 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
the PR template seems that its for bug fixes only, I would modify it to make it general, this is an example of what I use ``` ## 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 ```
Review

Nice, I'll update it

Nice, I'll update it
<!-- 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
Amjad50 marked this conversation as resolved
Review

I notice a lot of environment variables with GITHUB is this from forgejo to be compatible with github actions? or is it here by mistake?

I notice a lot of environment variables with `GITHUB` is this from forgejo to be compatible with github actions? or is it here by mistake?
Review

is this from forgejo to be compatible with github actions?

Yes it is, and imagine that there is no way to use env.FORGEJO_RUN_NUMBER for example, if you don't want to be compliant with GitHub actions.

> is this from forgejo to be compatible with github actions? Yes it is, and imagine that there is no way to use `env.FORGEJO_RUN_NUMBER` for example, if you don't want to be compliant with GitHub actions.
Review

alright, yah, everything else is good

alright, yah, everything else is good
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 }}

View file

@ -27,4 +27,8 @@ salvo_core = { version = "0.68.3", default-features = false, features = ["rustls
salvo-oapi = { version = "0.68.3", default-features = false, features = ["rapidoc","redoc","scalar","swagger-ui"] }
[profile.release]
strip = true # Automatically strip symbols from the binary.
strip = true
panic = "abort"
codegen-units = 1
lto = true

View file

@ -8,10 +8,8 @@ height="100">
An open-source [OxideTalis Messaging Protocol][`OTMP`] (OTMP) homeserver
implementation written in Rust.
<!-- [![Forgejo CI
Status](https://git.4rs.nl/oxidetalis/oxidetalis/badges/workflows/ci.yml/badge.svg)](https://git.4rs.nl/oxidetalis/oxidetalis)
[![Forgejo CD
Status](https://git.4rs.nl/oxidetalis/oxidetalis/badges/workflows/cd.yml/badge.svg)](https://git.4rs.nl/oxidetalis/oxidetalis) -->
[![Forgejo CI Status](https://git.4rs.nl/oxidetalis/oxidetalis/badges/workflows/ci.yml/badge.svg)](https://git.4rs.nl/oxidetalis/oxidetalis)
[![Forgejo CD Status](https://git.4rs.nl/oxidetalis/oxidetalis/badges/workflows/cd.yml/badge.svg)](https://git.4rs.nl/oxidetalis/oxidetalis)
[![agplv3-or-later](https://www.gnu.org/graphics/agplv3-88x31.png)](https://www.gnu.org/licenses/agpl-3.0.html)
@ -79,6 +77,10 @@ docker-compose up -d
For information on how to contribute to the project, please see the
[CONTRIBUTING.md](./CONTRIBUTING.md) file.
## Repository mirrors
- [Codeberg](https://codeberg.org/awiteb/oxidetalis)
- [GitHub](https://github.com/oxidetalis/oxidetalis)
## Licenses
The project is split into multiple crates, each with its own license:
* [`crates/oxidetalis`]: Homeserver implementation, licensed under the GNU