From 448782799cd056271870ef30b445963b48fea70a Mon Sep 17 00:00:00 2001 From: MaxOhn Date: Thu, 17 Apr 2025 01:20:52 +0200 Subject: [PATCH] ci: update ci --- .github/workflows/build.yml | 23 ------ .github/workflows/ci.yml | 152 ++++++++++++++++++++++++++++++++++++ 2 files changed, 152 insertions(+), 23 deletions(-) delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 66a6e99..0000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,23 +0,0 @@ -on: - release: - types: [created] - -jobs: - release: - name: release ${{ matrix.target }} - runs-on: ubuntu-22.04 - strategy: - fail-fast: true - matrix: - target: [x86_64-unknown-linux-musl, x86_64-pc-windows-gnu] - steps: - - name: Checkout project - uses: actions/checkout@v3 - - name: Compile and release - uses: rust-build/rust-build.action@master - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - SQLX_OFFLINE: true - with: - RUSTTARGET: ${{ matrix.target }} - TOOLCHAIN_VERSION: stable \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..48e612b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,152 @@ +name: CI + +on: + push: + branches: + - main + tags: + - "[0-9]+.[0-9]+.[0-9]+" + pull_request: + workflow_dispatch: + +# Required to create releases +permissions: + contents: write + +jobs: + clippy: + runs-on: ubuntu-latest + + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Install stable toolchain + uses: dtolnay/rust-toolchain@stable + + - name: Cache dependencies + uses: Swatinem/rust-cache@v2 + + - name: Run clippy + run: cargo clippy --all-targets + + rustfmt: + name: Format + runs-on: ubuntu-latest + + steps: + - name: Checkout sources + uses: actions/checkout@v4 + + - name: Install nightly toolchain + uses: dtolnay/rust-toolchain@stable + with: + components: rustfmt + toolchain: nightly + + - name: Check code formatting + run: cargo fmt -- --check + + create-release: + name: create-release + needs: [clippy, rustfmt] + if: success() && startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + steps: + - name: Checkout project + uses: actions/checkout@v4 + + - name: Get the release version from the tag + if: env.VERSION == '' + run: echo "VERSION=${{ github.ref_name }}" >> $GITHUB_ENV + + - name: Show the version + run: | + echo "version is: $VERSION" + + - name: Check that tag version and Cargo.toml version are the same + shell: bash + run: | + if ! grep -q "version = \"$VERSION\"" Cargo.toml; then + echo "version does not match Cargo.toml" >&2 + exit 1 + fi + + - name: Create GitHub release + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: gh release create $VERSION --draft --verify-tag --title $VERSION + + outputs: + version: ${{ env.VERSION }} + + build-release: + name: build-release + needs: ['create-release'] + runs-on: ${{ matrix.os }} + env: + SQLX_OFFLINE: true + RUST_BACKTRACE: 1 + strategy: + fail-fast: false + matrix: + include: + - build: linux + os: ubuntu-22.04 + target: x86_64-unknown-linux-musl + - build: win-msvc + os: windows-latest + target: x86_64-pc-windows-msvc + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable + target: ${{ matrix.target }} + + - name: Build release binary + shell: bash + run: | + cargo build --verbose --release + if [ "${{ matrix.os }}" = "windows-latest" ]; then + bin="target/release/osekai-scripts.exe" + else + bin="target/release/osekai-scripts" + fi + echo "BIN=$bin" >> $GITHUB_ENV + + - name: Determine archive name + shell: bash + run: | + version="${{ needs.create-release.outputs.version }}" + echo "ARCHIVE=osekai-scripts-$version-${{ matrix.target }}" >> $GITHUB_ENV + + - name: Build archive (Windows) + shell: bash + if: matrix.os == 'windows-latest' + run: | + zip -9r "$ARCHIVE.zip" "$BIN" + certutil -hashfile "$ARCHIVE.zip" SHA256 > "$ARCHIVE.zip.sha256" + echo "ASSET=$ARCHIVE.zip" >> $GITHUB_ENV + echo "ASSET_SUM=$ARCHIVE.zip.sha256" >> $GITHUB_ENV + + - name: Build archive (Unix) + shell: bash + if: matrix.os != 'windows-latest' + run: | + tar caf "$ARCHIVE.tar.gz" "$BIN" + shasum -a 256 "$ARCHIVE.tar.gz" > "$ARCHIVE.tar.gz.sha256" + echo "ASSET=$ARCHIVE.tar.gz" >> $GITHUB_ENV + echo "ASSET_SUM=$ARCHIVE.tar.gz.sha256" >> $GITHUB_ENV + + - name: Upload release archive + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + shell: bash + run: | + version="${{ needs.create-release.outputs.version }}" + gh release upload "$version" ${{ env.ASSET }} ${{ env.ASSET_SUM }}