name: 'Build and release binary file and packages' author: 'Neshura' on: push: tags: - '[0-9]+.[0-9]+.[0-9]+' - '[0-9]+.[0-9]+.[0-9]+-rc.[0-9]+' jobs: test: runs-on: docker container: forgejo.neshweb.net/ci-docker-images/rust-node:latest steps: - name: Add Clippy run: rustup component add clippy - name: Checking Out Repository Code uses: https://code.forgejo.org/actions/checkout@v3 - name: Set Up Cargo Cache uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Run Clippy run: cargo clippy - name: Check if Version in Cargo.toml matches Tag run: | VERSION=$(cat Cargo.toml | grep -E "(^|\|)version =" | cut -f2- -d= | tr -d \" | tr -d " ") if test $VERSION != "${{ github.ref_name }}"; then echo "Expected Version is: '${{ github.ref_name }}' actual Version is: '$VERSION'"; exit 1 else echo "Version is: '$VERSION'"; fi build: needs: test if: success() runs-on: docker container: forgejo.neshweb.net/ci-docker-images/rust-node:latest steps: - name: Checking Out Repository Code uses: https://code.forgejo.org/actions/checkout@v3 - name: Prepare build environment run: mkdir dist - name: Compiling To Linux Target run: | cargo build -r mv target/release/${{ github.event.repository.name }} dist/${{ github.event.repository.name }}-linux-amd64 - name: Bundle .deb package run: | cargo deb DEBIAN_REF=$(echo ${{ github.ref_name }} | tr - \~) echo "DEBIAN_REF=$DEBIAN_REF" >> dist/build.env DEBIAN_REV=-$(cat Cargo.toml | grep -E "(^|\|)revision =" | cut -f2- -d= | tr -d \" | tr -d " ") echo "DEBIAN_REV=$DEBIAN_REV" >> dist/build.env mv target/debian/${{ github.event.repository.name }}_"$DEBIAN_REF""$DEBIAN_REV"_amd64.deb dist/${{ github.event.repository.name }}_"$DEBIAN_REF""$DEBIAN_REV"_amd64.deb - name: Uploading Build Artifact uses: actions/upload-artifact@v3 with: name: release_blobs path: dist if-no-files-found: error upload-generic-package: needs: build if: success() runs-on: docker steps: - name: Downloading All Build Artifacts uses: actions/download-artifact@v3 - name: Upload Binary run: | echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}-linux-amd64 \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64' curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}-linux-amd64 \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/generic/${{ github.event.repository.name }}/${{ github.ref_name }}/${{ github.event.repository.name }}-linux-amd64 upload-debian-package: needs: build if: success() runs-on: docker steps: - name: Downloading All Build Artifacts uses: actions/download-artifact@v3 - name: Upload Debian Package to staging run: | source release_blobs/build.env echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}_'"$DEBIAN_REF""$DEBIAN_REV"'_amd64.deb \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/debian/pool/bookworm/staging/upload' curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}_"$DEBIAN_REF""$DEBIAN_REV"_amd64.deb \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/debian/pool/bookworm/staging/upload - name: Upload Debian Package to main if: (! contains(github.ref_name, '-rc')) run: | source release_blobs/build.env echo 'curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}_'"$DEBIAN_REF""$DEBIAN_REV"'_amd64.deb \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/debian/pool/bookworm/main/upload' curl -v --user ${{ secrets.FORGEJO_USERNAME }}:${{ secrets.FORGEJO_TOKEN }} \ --upload-file release_blobs/${{ github.event.repository.name }}_"$DEBIAN_REF""$DEBIAN_REV"_amd64.deb \ https://forgejo.neshweb.net/api/packages/${{ secrets.FORGEJO_USERNAME }}/debian/pool/bookworm/main/upload create-release: needs: build if: success() runs-on: docker steps: - name: Downloading All Build Artifacts uses: actions/download-artifact@v3 - name: Filter out env files run: rm release_blobs/build.env - name: Release New Version uses: actions/forgejo-release@v2 with: direction: upload url: https://forgejo.neshweb.net release-dir: release_blobs token: ${{ secrets.FORGEJO_TOKEN }} tag: ${{ github.ref_name }}