web / .github /workflows /release.yml
victorgeek's picture
Upload folder using huggingface_hub
9552aa0 verified
name: Release
on:
push:
branches: [ "main" ]
jobs:
release:
# Set the job to run on the platform specified by the matrix below
runs-on: ${{ matrix.runner }}
# Define the build matrix for cross-compilation
strategy:
matrix:
include:
- name: x86_64-unknown-linux-gnu
runner: ubuntu-latest
target: x86_64-unknown-linux-gnu
command: cross
- name: x86_64-unknown-linux-musl
runner: ubuntu-latest
target: x86_64-unknown-linux-musl
command: cross
- name: i686-unknown-linux-gnu
runner: ubuntu-latest
target: i686-unknown-linux-gnu
command: cross
- name: aarch64-unknown-linux-gnu
runner: ubuntu-latest
target: aarch64-unknown-linux-gnu
command: cross
- name: armv7-unknown-linux-gnueabihf
runner: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
command: cross
- name: riscv64gc-unknown-linux-gnu
runner: ubuntu-latest
target: riscv64gc-unknown-linux-gnu
command: cross
- name: x86_64-unknown-freebsd
runner: ubuntu-latest
target: x86_64-unknown-freebsd
command: cross
- name: x86_64-pc-windows-msvc
runner: windows-latest
target: x86_64-pc-windows-msvc
command: cargo
- name: i686-pc-windows-msvc
runner: windows-latest
target: i686-pc-windows-msvc
command: cargo
- name: aarch64-pc-windows-msvc
runner: windows-latest
target: aarch64-pc-windows-msvc
command: cargo
- name: x86_64-apple-darwin
runner: macos-latest
target: x86_64-apple-darwin
command: cargo
- name: aarch64-apple-darwin
runner: macos-latest
target: aarch64-apple-darwin
command: cargo
# The steps to run for each matrix item
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: main
fetch-depth: 0
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: "${{ matrix.target }}"
- name: Setup cache
uses: Swatinem/rust-cache@v2
- name: Determine Ferron version
shell: bash
run: |
FERRON_VERSION_CARGO="$(cat ferron/Cargo.toml | grep -E '^version' | sed -E 's|.*"([0-9a-zA-Z.+-]+)"$|\1|g')"
FERRON_VERSION_GIT="$(git tag --sort=-committerdate | head -n 1 | sed s/[^0-9a-zA-Z.+-]//g)"
if [ "$FERRON_VERSION_CARGO" != "" ]; then
echo "Version determined from Cargo.toml file"
echo "FERRON_VERSION=$FERRON_VERSION_CARGO" >> $GITHUB_ENV
elif [ "$FERRON_VERSION_GIT" != "" ]; then
echo "Version determined from the Git tag"
echo "FERRON_VERSION=$FERRON_VERSION_GIT" >> $GITHUB_ENV
else
echo "Can't determine the server version!" 2>&1
exit 1
fi
- name: Install Cross
if: matrix.command == 'cross'
shell: bash
run: |
curl -L --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/cargo-bins/cargo-binstall/main/install-from-binstall-release.sh | bash
cargo binstall --no-confirm cross
- name: Build binaries
run: "${{ matrix.command }} build --verbose --locked --release --target ${{ matrix.target }}"
- name: Prepare for packaging
shell: bash
run: |
mkdir release
find target/${{ matrix.target }}/release -mindepth 1 -maxdepth 1 -type f ! -name "*.*" -o -name "*.exe" -o -name "*.dll" -o -name "*.dylib" -o -name "*.so" | sed -E "s|(.*)|cp -a \1 release|" | bash
cp -a ferron-release.yaml release/ferron.yaml
cp -a wwwroot release
- name: Create a release ZIP archive
uses: thedoctor0/zip-release@0.7.5
with:
type: "zip"
filename: "../ferron.zip"
directory: "release"
- name: Set up SSH
uses: LuisEnMarroquin/setup-ssh-action@v2.0.5
with:
ORIGIN: ${{ secrets.SSH_HOSTNAME }}
SSHKEY: ${{ secrets.SSH_KEY }}
NAME: ferron-servers
PORT: ${{ secrets.SSH_PORT }}
USER: ${{ secrets.SSH_USERNAME }}
- name: Release Ferron on Ferron's servers
shell: bash
run: |
ssh ferron-servers "mkdir -p ferron/${{ env.FERRON_VERSION }} || true"
scp ferron.zip ferron-servers:ferron/${{ env.FERRON_VERSION }}/ferron-${{ env.FERRON_VERSION }}-${{ matrix.target }}.zip
# The "move-ferron-archive" is a custom command that moves the ZIP archive to be served by the download server
ssh ferron-servers "sudo move-ferron-archive ${{ env.FERRON_VERSION }} ${{ matrix.target }}"
docs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: main
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Setup cache
uses: Swatinem/rust-cache@v2
- name: Generate the Rust crate documentation
run: "cargo doc --verbose --locked --release"
- name: Create the documentation ZIP archive
uses: thedoctor0/zip-release@0.7.5
with:
type: "zip"
filename: "../../ferron-rustdocs.zip"
directory: "target/doc"
- name: Set up SSH
uses: LuisEnMarroquin/setup-ssh-action@v2.0.5
with:
ORIGIN: ${{ secrets.SSH_HOSTNAME }}
SSHKEY: ${{ secrets.SSH_KEY }}
NAME: ferron-servers
PORT: ${{ secrets.SSH_PORT }}
USER: ${{ secrets.SSH_USERNAME }}
- name: Deploy the documentation
shell: bash
run: |
scp ferron-rustdocs.zip ferron-servers:.
# The "deploy-ferron-rustdocs" is a custom command that deploys the Ferron's Rust crate documentation
ssh ferron-servers "sudo deploy-ferron-rustdocs ferron-rustdocs.zip && rm ferron-rustdocs.zip"
docker:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
attestations: write
id-token: write
steps:
- name: Checkout
uses: actions/checkout@v3
with:
ref: main
fetch-depth: 0
- name: Log in to Docker Hub
uses: docker/login-action@f4ef78c080cd8ba55a85445d5b36e214a81df20a
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Determine Ferron version
shell: bash
run: |
FERRON_VERSION_CARGO="$(cat ferron/Cargo.toml | grep -E '^version' | sed -E 's|.*"([0-9a-zA-Z.+-]+)"$|\1|g')"
FERRON_VERSION_GIT="$(git tag --sort=-committerdate | head -n 1 | sed s/[^0-9a-zA-Z.+-]//g)"
if [ "$FERRON_VERSION_CARGO" != "" ]; then
echo "Version determined from Cargo.toml file"
echo "FERRON_VERSION=$FERRON_VERSION_CARGO" >> $GITHUB_ENV
elif [ "$FERRON_VERSION_GIT" != "" ]; then
echo "Version determined from the Git tag"
echo "FERRON_VERSION=$FERRON_VERSION_GIT" >> $GITHUB_ENV
else
echo "Can't determine the server version!" 2>&1
exit 1
fi
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Build and push Docker image
id: push
uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671
with:
context: .
file: ./Dockerfile
push: true
tags: "ferronserver/ferron:${{ env.FERRON_VERSION }},ferronserver/ferron:latest"
- name: Generate artifact attestation
uses: actions/attest-build-provenance@v2
with:
subject-name: index.docker.io/ferronserver/ferron
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true