Skip to content

build_and_release

build_and_release #44

# This workflow will create a release and build multiple versions of the webrtc library.
name: build_and_release
on:
workflow_dispatch:
branches: [main]
jobs:
create-release:
runs-on: ubuntu-20.04
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- name: Generate Version Output
id: generate_version_output
run: echo "::set-output name=version::$(cat VERSION)"
shell: bash
- name: Print Version Information
run: echo "Version ${{ steps.generate_version_output.outputs.version }}"
shell: bash
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
with:
tag_name: ${{ steps.generate_version_output.outputs.version }}
release_name: webrtc-native-build-${{ steps.generate_version_output.outputs.version }}
body: |
Latest build of webrtc-native-build
- This is a prerelease, use at your own risks.
draft: true
prerelease: true
- name: Output Release URL File
run: echo "${{ steps.create_release.outputs.upload_url }}" > release_url.txt
- name: Save Release URL File for publish
uses: actions/upload-artifact@v4
with:
name: release_url
path: release_url.txt
build-linux:
needs: create-release
strategy:
matrix:
os: [ubuntu-20.04, ubuntu-22.04]
architecture: [amd64, arm64]
build-type: [Release, Debug]
runs-on: ${{ matrix.os }}
steps:
- name: Maximize build space
uses: easimon/maximize-build-space@master
with:
root-reserve-mb: 1024
swap-size-mb: 1024
remove-dotnet: 'true'
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/download-artifact@v4
with:
name: release_url
- name: Get Upload URL
id: get_release_info
run: |
echo "::set-output name=upload_url::$(cat release_url.txt)"
ls -l
cat release_url.txt
- name: Generate Version Output
id: generate_version_output
run: echo "::set-output name=version::$(cat VERSION)"
shell: bash
- name: Print Version Information
run: echo "Version ${{ steps.generate_version_output.outputs.version }}"
shell: bash
- name: Generate Release File Name
id: generate_release_file_name
run: |
echo "::set-output name=release_file_name::webrtc-native-build-${{ matrix.os }}-\
${{ matrix.architecture }}-\
${{ matrix.build-type }}-\
${{ steps.generate_version_output.outputs.version }}"
- name: Print Release File Name
run: echo "Release File Name ${{ steps.generate_release_file_name.outputs.release_file_name }}"
shell: bash
- name: Install system dependencies
run: |
sudo apt-get update
sudo apt-get install ninja-build cmake build-essential libssl-dev libboost-all-dev
sudo apt-get install libglib2.0-dev libgtk-3-dev libpulse-dev libasound2-dev
- name: Install cross compilation dependencies
run: |
sudo apt-get install g++-aarch64-linux-gnu gcc-aarch64-linux-gnu
sudo apt-get install gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf
if: matrix.architecture == 'arm64'
- name: Create build directory
working-directory: .
run: |
mkdir build
- name: Run CMake and build webrtc-native-build
working-directory: build
run: |
cmake ../ -DCMAKE_BUILD_TYPE=${{ matrix.build-type}} -DCMAKE_BUILD_ARCHITECTURE=${{ matrix.architecture }}
make -j2
make install
- name: Create Archive
working-directory: dist/${{ matrix.build-type }}
run: |
tar cvzf ${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz webrtc-native-build-${{ steps.generate_version_output.outputs.version }}
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.get_release_info.outputs.upload_url }}
asset_path: dist/${{ matrix.build-type }}/${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz
asset_name: ${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz
asset_content_type: application/x-gzip
build-mac:
needs: create-release
strategy:
matrix:
os: [macos-11, macos-12, macos-13]
architecture: [osx64]
build-type: [Release, Debug]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: actions/download-artifact@v4
with:
name: release_url
- name: Get Upload URL
id: get_release_info
run: |
echo "::set-output name=upload_url::$(cat release_url.txt)"
ls -l
cat release_url.txt
- name: Generate Version Output
id: generate_version_output
run: echo "::set-output name=version::$(cat VERSION)"
shell: bash
- name: Print Version Information
run: echo "Version ${{ steps.generate_version_output.outputs.version }}"
shell: bash
- name: Generate Release File Name
id: generate_release_file_name
run: |
echo "::set-output name=release_file_name::webrtc-native-build-${{ matrix.os }}-\
${{ matrix.architecture }}-\
${{ matrix.build-type }}-\
${{ steps.generate_version_output.outputs.version }}"
- name: Print Release File Name
run: echo "Release File Name ${{ steps.generate_release_file_name.outputs.release_file_name }}"
shell: bash
- name: Install system dependencies
run: |
brew install ninja
- name: Create build directory
working-directory: .
run: |
mkdir build
- name: Run CMake and build webrtc-native-build
working-directory: build
run: |
cmake ../ -DCMAKE_BUILD_TYPE=${{ matrix.build-type}} -DCMAKE_BUILD_ARCHITECTURE=${{ matrix.architecture }}
make -j3
make install
- name: Create Archive
working-directory: dist/${{ matrix.build-type }}
run: |
tar cvzf ${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz webrtc-native-build-${{ steps.generate_version_output.outputs.version }}
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.get_release_info.outputs.upload_url }}
asset_path: dist/${{ matrix.build-type }}/${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz
asset_name: ${{ steps.generate_release_file_name.outputs.release_file_name }}.tar.gz
asset_content_type: application/x-gzip