From fcaf7db674aa98761c8daf2597f206cabb754613 Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Sat, 6 Jul 2024 15:51:59 +0300
Subject: [PATCH 1/3] feat: Create CI/CD
Signed-off-by: Awiteb
Reviewed-by: Amjad Alsharafi
---
.forgejo/ISSUE_TEMPLATE/bug.md | 29 ++++++
.forgejo/ISSUE_TEMPLATE/feature_request.md | 10 ++
.forgejo/ISSUE_TEMPLATE/typo.md | 16 +++
.forgejo/pull_request_template.md | 19 ++++
.forgejo/workflows/cd.yml | 114 +++++++++++++++++++++
.forgejo/workflows/changelog.yml | 36 +++++++
.forgejo/workflows/ci.yml | 25 +++++
.github/workflows/auto_close_pr.yml | 34 ++++++
8 files changed, 283 insertions(+)
create mode 100644 .forgejo/ISSUE_TEMPLATE/bug.md
create mode 100644 .forgejo/ISSUE_TEMPLATE/feature_request.md
create mode 100644 .forgejo/ISSUE_TEMPLATE/typo.md
create mode 100644 .forgejo/pull_request_template.md
create mode 100644 .forgejo/workflows/cd.yml
create mode 100644 .forgejo/workflows/changelog.yml
create mode 100644 .forgejo/workflows/ci.yml
create mode 100644 .github/workflows/auto_close_pr.yml
diff --git a/.forgejo/ISSUE_TEMPLATE/bug.md b/.forgejo/ISSUE_TEMPLATE/bug.md
new file mode 100644
index 0000000..d8f0b20
--- /dev/null
+++ b/.forgejo/ISSUE_TEMPLATE/bug.md
@@ -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
+
+
+
+Oxidetalis version: `...`
+
+## Description
+
+
+## Expected behavior
+
+
+## Actual behavior
+
diff --git a/.forgejo/ISSUE_TEMPLATE/feature_request.md b/.forgejo/ISSUE_TEMPLATE/feature_request.md
new file mode 100644
index 0000000..134c932
--- /dev/null
+++ b/.forgejo/ISSUE_TEMPLATE/feature_request.md
@@ -0,0 +1,10 @@
+---
+name: Feature request
+about: Suggest an idea for Oxidetalis
+title: '...'
+labels: ["Kind/Feature"]
+assignees: ''
+---
+
+## Feature description
+
diff --git a/.forgejo/ISSUE_TEMPLATE/typo.md b/.forgejo/ISSUE_TEMPLATE/typo.md
new file mode 100644
index 0000000..96d1c19
--- /dev/null
+++ b/.forgejo/ISSUE_TEMPLATE/typo.md
@@ -0,0 +1,16 @@
+---
+name: Typo report
+about: Report a typo in the documentation or the code
+title: '...'
+labels: ["Kind/Documentation"]
+assignees: ''
+---
+
+
+
+| Location | Suggestion |
+|----------|------------|
+| Code-link| Suggestion |
+
diff --git a/.forgejo/pull_request_template.md b/.forgejo/pull_request_template.md
new file mode 100644
index 0000000..3c61370
--- /dev/null
+++ b/.forgejo/pull_request_template.md
@@ -0,0 +1,19 @@
+## Summary
+
+
+
+### Related issue
+
+
+
+
+## Changes
+
+
+
+
+## Checklist
+- [ ] Added tests if applicable (for new features/regression/etc...)
+- [ ] Documentation
diff --git a/.forgejo/workflows/cd.yml b/.forgejo/workflows/cd.yml
new file mode 100644
index 0000000..65e7168
--- /dev/null
+++ b/.forgejo/workflows/cd.yml
@@ -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') }}
diff --git a/.forgejo/workflows/changelog.yml b/.forgejo/workflows/changelog.yml
new file mode 100644
index 0000000..fb67645
--- /dev/null
+++ b/.forgejo/workflows/changelog.yml
@@ -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
diff --git a/.forgejo/workflows/ci.yml b/.forgejo/workflows/ci.yml
new file mode 100644
index 0000000..2bad798
--- /dev/null
+++ b/.forgejo/workflows/ci.yml
@@ -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
diff --git a/.github/workflows/auto_close_pr.yml b/.github/workflows/auto_close_pr.yml
new file mode 100644
index 0000000..da2d1f5
--- /dev/null
+++ b/.github/workflows/auto_close_pr.yml
@@ -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 }}
--
2.45.2
From f5ffa3733e7957f8a6032e18831e8d017c946fff Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Sun, 7 Jul 2024 14:21:04 +0300
Subject: [PATCH 2/3] chore: Update README.md
Add ci/cd badges and repo mirrors
Signed-off-by: Awiteb
Reviewed-by: Amjad Alsharafi
---
README.md | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index e51dbb3..9ad612a 100644
--- a/README.md
+++ b/README.md
@@ -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)
[![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
--
2.45.2
From 4590d8b2afee51e808e9580405e4cb3ed42f1c3b Mon Sep 17 00:00:00 2001
From: Awiteb
Date: Sun, 7 Jul 2024 16:34:47 +0300
Subject: [PATCH 3/3] feat: Make the executable little small
Signed-off-by: Awiteb
Reviewed-by: Amjad Alsharafi
---
Cargo.toml | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/Cargo.toml b/Cargo.toml
index 998b875..158da2d 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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
+
--
2.45.2