Skip to content

File & directory deletion feature #1390

File & directory deletion feature

File & directory deletion feature #1390

Workflow file for this run

name: Build/publish release
on: [push, pull_request]
jobs:
publish:
name: Binary ${{ matrix.target }} (on ${{ matrix.os }})
runs-on: ${{ matrix.os }}
outputs:
version: ${{ steps.extract_version.outputs.version }}
strategy:
matrix:
include:
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: x86_64-unknown-linux-gnu
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: aarch64-unknown-linux-musl
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: armv7-unknown-linux-musleabihf
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: armv7-unknown-linux-gnueabihf
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: arm-unknown-linux-musleabihf
compress: true
cargo_flags: ""
- os: ubuntu-latest
target: riscv64gc-unknown-linux-gnu
compress: false
cargo_flags: "--no-default-features"
- os: windows-latest
target: x86_64-pc-windows-msvc
compress: true
cargo_flags: ""
- os: windows-latest
target: i686-pc-windows-msvc
compress: true
cargo_flags: ""
- os: macos-latest
target: x86_64-apple-darwin
compress: false
cargo_flags: ""
- os: macos-latest
target: aarch64-apple-darwin
compress: false
cargo_flags: ""
- os: ubuntu-latest
target: x86_64-unknown-freebsd
compress: false
cargo_flags: ""
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- run: sudo apt install musl-tools
if: startsWith(matrix.os, 'ubuntu')
- name: cargo build
uses: houseabsolute/actions-rust-cross@v0
with:
command: build
args: --release --locked ${{ matrix.cargo_flags }}
target: ${{ matrix.target }}
- name: Set exe extension for Windows
run: echo "EXE=.exe" >> $env:GITHUB_ENV
if: startsWith(matrix.os, 'windows')
- name: Compress binaries
uses: svenstaro/upx-action@v2
with:
files: target/${{ matrix.target }}/release/miniserve${{ env.EXE }}
args: --best --lzma
strip: false # We're stripping already in Cargo.toml
if: ${{ matrix.compress }}
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: ${{ matrix.target }}
path: target/${{ matrix.target }}/release/miniserve${{ env.EXE }}
- name: Get version from tag
id: extract_version
run: |
echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT"
shell: bash
- name: Install CHANGELOG parser
uses: taiki-e/install-action@parse-changelog
- name: Get CHANGELOG entry
run: parse-changelog CHANGELOG.md ${{ steps.extract_version.outputs.version }} | tee changelog_entry
if: startsWith(github.ref_name, 'v') && github.ref_type == 'tag'
shell: bash
- name: Read changelog entry from file
id: changelog_entry
uses: juliangruber/read-file-action@v1
with:
path: ./changelog_entry
if: startsWith(github.ref_name, 'v') && github.ref_type == 'tag'
- name: Release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: target/${{ matrix.target }}/release/miniserve${{ env.EXE }}
tag: ${{ github.ref_name }}
asset_name: miniserve-${{ steps.extract_version.outputs.version }}-${{ matrix.target }}${{ env.EXE }}
body: ${{ steps.changelog_entry.outputs.content }}
if: startsWith(github.ref_name, 'v') && github.ref_type == 'tag'
container-images:
name: Publish images
runs-on: ubuntu-latest
needs: publish
# Run for tags and pushes to the default branch
if: (startsWith(github.ref_name, 'v') && github.ref_type == 'tag') || github.event.repository.default_branch == github.ref_name
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Download artifact aarch64-unknown-linux-gnu
uses: actions/download-artifact@v4
with:
name: aarch64-unknown-linux-gnu
path: target/aarch64-unknown-linux-gnu/release
- name: Download artifact x86_64-unknown-linux-gnu
uses: actions/download-artifact@v4
with:
name: x86_64-unknown-linux-gnu
path: target/x86_64-unknown-linux-gnu/release
- name: Download artifact armv7-unknown-linux-gnueabihf
uses: actions/download-artifact@v4
with:
name: armv7-unknown-linux-gnueabihf
path: target/armv7-unknown-linux-gnueabihf/release
- name: Download artifact aarch64-unknown-linux-musl
uses: actions/download-artifact@v4
with:
name: aarch64-unknown-linux-musl
path: target/aarch64-unknown-linux-musl/release
- name: Download artifact x86_64-unknown-linux-musl
uses: actions/download-artifact@v4
with:
name: x86_64-unknown-linux-musl
path: target/x86_64-unknown-linux-musl/release
- name: Download artifact armv7-unknown-linux-musleabihf
uses: actions/download-artifact@v4
with:
name: armv7-unknown-linux-musleabihf
path: target/armv7-unknown-linux-musleabihf/release
- name: podman login
run: podman login --username ${{ secrets.DOCKERHUB_USERNAME }} --password ${{ secrets.DOCKERHUB_TOKEN }} docker.io
- name: podman build linux/arm64
run: podman build --format docker --platform linux/arm64/v8 --manifest miniserve -f Containerfile target/aarch64-unknown-linux-gnu/release
- name: podman build linux/amd64
run: podman build --format docker --platform linux/amd64 --manifest miniserve -f Containerfile target/x86_64-unknown-linux-gnu/release
- name: podman build linux/arm
run: podman build --format docker --platform linux/arm/v7 --manifest miniserve -f Containerfile target/armv7-unknown-linux-gnueabihf/release
- name: podman manifest push latest
run: podman manifest push miniserve docker.io/svenstaro/miniserve:latest
- name: podman manifest push tag version
run: podman manifest push miniserve docker.io/svenstaro/miniserve:${{ needs.publish.outputs.version }}
if: startsWith(github.ref_name, 'v')
- name: podman build linux/arm64 (alpine edition)
run: podman build --format docker --platform linux/arm64/v8 --manifest miniserve-alpine -f Containerfile.alpine target/aarch64-unknown-linux-musl/release
- name: podman build linux/amd64 (alpine edition)
run: podman build --format docker --platform linux/amd64 --manifest miniserve-alpine -f Containerfile.alpine target/x86_64-unknown-linux-musl/release
- name: podman build linux/arm (alpine edition)
run: podman build --format docker --platform linux/arm/v7 --manifest miniserve-alpine -f Containerfile.alpine target/armv7-unknown-linux-musleabihf/release
- name: podman manifest push latest (alpine edition)
run: podman manifest push miniserve-alpine docker.io/svenstaro/miniserve:alpine
- name: podman manifest push tag version (alpine edition)
run: podman manifest push miniserve-alpine docker.io/svenstaro/miniserve:${{ needs.publish.outputs.version }}-alpine
if: startsWith(github.ref_name, 'v')