Skip to content

Merge pull request #144 from harlanc/support_rtsp_client #13

Merge pull request #144 from harlanc/support_rtsp_client

Merge pull request #144 from harlanc/support_rtsp_client #13

Workflow file for this run

name: Build/publish release
#on: [push, pull_request]
on:
push:
# Pattern matched against refs/tags
tags:
- "*" # Push events to every tag not containing /
jobs:
# cargo publish libraries and xiu to crates.io
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
- name: Replace Online Manifest file
run: make online
- name: Install Cargo-workspace
uses: baptiste0928/cargo-install@v3
with:
crate: cargo-workspaces
version: "^0.3.1" # You can specify any semver range
- name: Run cargo workspace publish
run: cargo workspaces publish --from-git --no-git-push --no-git-tag --no-global-tag --allow-dirty --token ${{ secrets.CARGO_REGISTRY_TOKEN }}
# release on github including writing release note and build binaries on different os and upload
release:
name: Binary ${{ matrix.target }} (on ${{ matrix.os }})
runs-on: ${{ matrix.os }}
needs: publish
outputs:
version: ${{ steps.extract_version.outputs.version }}
strategy:
matrix:
include:
# supported
- os: ubuntu-latest
target: x86_64-unknown-linux-musl
compress: true
cargo_flags: ""
# supported
- 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: ""
# supported
- os: ubuntu-latest
target: aarch64-unknown-linux-gnu
compress: true
cargo_flags: ""
#- os: ubuntu-latest
# target: armv7-unknown-linux-musleabihf
# compress: true
# cargo_flags: ""
# supported
- 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"
# supported
- os: windows-latest
target: x86_64-pc-windows-msvc
compress: true
cargo_flags: ""
# supported
- os: windows-latest
target: i686-pc-windows-msvc
compress: true
cargo_flags: ""
# supported
- os: macos-latest
target: x86_64-apple-darwin
compress: true
cargo_flags: ""
## - os: macos-latest
## target: aarch64-apple-darwin
## compress: false
## cargo_flags: ""
# supported
- os: ubuntu-latest
target: x86_64-unknown-freebsd
compress: false
cargo_flags: ""
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Setup Rust toolchain
uses: dtolnay/rust-toolchain@stable
- run: sudo apt install musl-tools pkg-config libssl-dev gcc-multilib
if: startsWith(matrix.os, 'ubuntu')
- name: Set up project
run: |
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig/
echo $PKG_CONFIG_PATH
find /usr/lib -name openssl.pc
#cat /usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc
#dpkg -l | grep openssl
#/usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc
if: startsWith(matrix.os, 'ubuntu')
- name: cargo build
uses: houseabsolute/actions-rust-cross@v0
with:
command: build
working-directory: ./application/xiu
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/xiu${{ env.EXE }}
args: --best --lzma
strip: false # We're stripping already in Cargo.toml
if: ${{ matrix.compress }}
- name: Copy Files
if: ${{ !startsWith(matrix.os, 'windows') }}
run: |
echo ${GITHUB_WORKSPACE}
ls -lrth
cp -rf "./application/xiu/src/config/examples" "target/${{ matrix.target }}/release/"
cp -f "./protocol/webrtc/src/clients/index.html" "target/${{ matrix.target }}/release/"
cp -f "./protocol/webrtc/src/clients/whep.js" "target/${{ matrix.target }}/release/"
cp -f "./docker/start.sh" "target/${{ matrix.target }}/release/"
- name: Upload artifact
uses: actions/upload-artifact@v3
with:
name: ${{ matrix.target }}
path: |
target/${{ matrix.target }}/release/xiu${{ env.EXE }}
target/${{ matrix.target }}/release/examples
target/${{ matrix.target }}/release/index.html
target/${{ matrix.target }}/release/whep.js
target/${{ matrix.target }}/release/start.sh
- 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 ./application/xiu/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.ACCESS_TOKEN }}
file: target/${{ matrix.target }}/release/xiu${{ env.EXE }}
tag: ${{ github.ref_name }}
asset_name: xiu-${{ 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'
# Build docker images and upload to docker hub
container-images:
name: Publish images
runs-on: ubuntu-latest
needs: release
# 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@v3
- name: Download artifact aarch64-unknown-linux-gnu
uses: actions/download-artifact@v3
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@v3
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@v3
with:
name: armv7-unknown-linux-gnueabihf
path: target/armv7-unknown-linux-gnueabihf/release
#- name: Download artifact aarch64-unknown-linux-musl
# uses: actions/download-artifact@v3
# 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@v3
# 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@v3
# 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: ls -lrth target/aarch64-unknown-linux-gnu/release/ && podman build --format docker --platform linux/arm64/v8 --manifest xiu -f ./docker/Dockerfile target/aarch64-unknown-linux-gnu/release
- name: podman build linux/amd64
run: podman build --format docker --platform linux/amd64 --manifest xiu -f ./docker/Dockerfile target/x86_64-unknown-linux-gnu/release
- name: podman build linux/arm
run: podman build --format docker --platform linux/arm/v7 --manifest xiu -f ./docker/Dockerfile target/armv7-unknown-linux-gnueabihf/release
- name: podman manifest push latest
run: podman manifest push xiu docker.io/harlancn/xiu:latest
- name: podman manifest push tag version
run: podman manifest push xiu docker.io/harlancn/xiu:${{ needs.release.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 myexe-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 myexe-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 myexe-alpine -f Containerfile.alpine target/armv7-unknown-linux-musleabihf/release
#- name: podman manifest push latest (alpine edition)
# run: podman manifest push myexe-alpine docker.io/harlancn/myexe:alpine
#- name: podman manifest push tag version (alpine edition)
# run: podman manifest push myexe-alpine docker.io/harlancn/myexe:${{ needs.publish.outputs.version }}-alpine
# if: startsWith(github.ref_name, 'v')