autogenerate year when printing remoteAudio version #75
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Cross Platform build | |
on: [push, pull_request] | |
jobs: | |
build_linux: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
version: ['linux-armhf', 'linux-arm64', 'linux-i386', 'linux-amd64'] | |
include: | |
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH) | |
# instead of using Linux' naming convention (version items). | |
- version: linux-armhf | |
OS: linux | |
ARCH: arm | |
- version: linux-arm64 | |
OS: linux | |
ARCH: arm64 | |
- version: linux-i386 | |
OS: linux | |
ARCH: '386' | |
- version: linux-amd64 | |
OS: linux | |
ARCH: amd64 | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: Build binary for ${{ matrix.version }} | |
run: | | |
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp dh1tw/remoteaudio-xcompile:${{ matrix.version }} /bin/sh -c 'make dist' | |
- name: Prepare build artifact for stashing | |
run: | | |
mkdir release | |
mv ./remoteAudio ./release | |
# The build artifact can be identified by the trailing sha of the git commit | |
- name: Stash the build artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }} | |
path: ./release | |
build_macos: | |
runs-on: macos-latest | |
strategy: | |
matrix: | |
version: ['darwin-amd64', 'darwin-arm64'] | |
include: | |
- version: darwin-amd64 | |
OS: darwin | |
ARCH: amd64 | |
- version: darwin-arm64 | |
OS: darwin | |
ARCH: arm64 | |
steps: | |
- name: Set up Go 1.18 | |
uses: actions/setup-go@v1 | |
id: go | |
with: | |
go-version: 1.18 | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: Install dependencies | |
run: | | |
brew install pkg-config | |
brew install opus | |
brew install opusfile | |
brew install portaudio | |
brew install protobuf | |
brew install libsamplerate | |
brew install upx | |
- name: Install code generators | |
run: make install-deps | |
- name: Build binary for macOS | |
run: | | |
export PATH=/System/Volumes/Data/Users/runner/go/bin:$PATH | |
make dist | |
- name: Prepare build artifact for stashing | |
run: | | |
mkdir release | |
mv ./remoteAudio ./release | |
# The build artifact can be identified by the trailing sha of the git commit | |
- name: Stash the build artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }} | |
path: ./release | |
build_windows: | |
runs-on: ubuntu-20.04 | |
strategy: | |
matrix: | |
version: ['windows-amd64', 'windows-i386'] | |
include: | |
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH) | |
# instead of using Linux' naming convention (version items). | |
- version: windows-amd64 | |
OS: windows | |
ARCH: amd64 | |
- version: windows-i386 | |
OS: windows | |
ARCH: '386' | |
steps: | |
- uses: actions/checkout@v1 | |
with: | |
submodules: true | |
- name: Build binary for ${{ matrix.version }} | |
run: | | |
docker run --rm -v "$PWD":/usr/src/myapp -w /usr/src/myapp dh1tw/remoteaudio-xcompile:${{ matrix.version }} /bin/sh -c 'make dist && /scripts/getlibs.sh .' | |
- name: Prepare build artifacts for stashing | |
run: | | |
mkdir release | |
mv ./remoteAudio.exe ./release | |
mv ./*.dll ./release | |
# The build artifact can be identified by the trailing sha of the git commit | |
- name: Stash the build artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }} | |
path: ./release | |
# A Github release is created whenever the git reference contains a tag, starting with 'v*' (e.g. v0.4.2) | |
# And the previous build jobs have been successful | |
create_release: | |
runs-on: ubuntu-20.04 | |
needs: [build_linux, build_macos, build_windows] | |
if: startsWith(github.ref, 'refs/tags/v') | |
steps: | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@v1.0.0 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.ref }} | |
release_name: Release ${{ github.ref }} | |
draft: true | |
prerelease: false | |
# since jobs can not share any variables we have to copy the URL of the created Github release | |
# into a file and stash it as an artifact | |
- name: Copy release URL into file | |
run: | | |
mkdir release | |
printf "%s" "${{ steps.create_release.outputs.upload_url }}" > release/url.txt | |
- name: Stash file containing the release URL as an artifact | |
uses: actions/upload-artifact@v1 | |
with: | |
name: release-url | |
path: ./release | |
# In this job we upload the release artifacts to the corresponding release | |
upload: | |
runs-on: ubuntu-20.04 | |
needs: create_release # release must be created before this job can start | |
strategy: | |
matrix: | |
version: ['linux-armhf', 'linux-arm64', 'linux-i386', 'linux-amd64', 'darwin-amd64', 'darwin-arm64', 'windows-amd64', 'windows-i386'] | |
# add the GO naming convention for OS ($GOOS) and architecture ($GOARCH) | |
# instead of using Linux' naming convention (version items). | |
include: | |
- version: linux-armhf | |
OS: linux | |
ARCH: arm | |
- version: linux-arm64 | |
OS: linux | |
ARCH: arm64 | |
- version: linux-i386 | |
OS: linux | |
ARCH: '386' | |
- version: linux-amd64 | |
OS: linux | |
ARCH: amd64 | |
- version: darwin-amd64 | |
OS: darwin | |
ARCH: amd64 | |
- version: darwin-arm64 | |
OS: darwin | |
ARCH: arm64 | |
- version: windows-amd64 | |
OS: windows | |
ARCH: amd64 | |
- version: windows-i386 | |
OS: windows | |
ARCH: '386' | |
steps: | |
# Since Github actions (currently) doesn't provide a slugged version of the git tag we have to | |
# create it by ourselves. It is then made available to other steps in this job as a step.outputs | |
# variable | |
- name: Get the version (git tag) | |
id: get_version | |
run: | | |
echo ${GITHUB_REF/refs\/tags\//} | |
echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} | |
- name: Retrieve stashed intermediary build artifact | |
uses: actions/download-artifact@v1 | |
with: | |
name: remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }} | |
# rename the retrieved intermediary artifact and prepare zip file | |
- name: Prepare release artifact | |
env: | |
VERSION: ${{ steps.get_version.outputs.VERSION }} | |
run: | | |
mv ./remoteAudio-${{ matrix.OS }}-${{ matrix.ARCH }}-${{ github.sha }}/* . | |
test -f ./remoteAudio && chmod +x ./remoteAudio #only on linux & darwin needed | |
zip -j remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip ./* | |
# Download the previously uploaded artifact which contains the release URL | |
- name: Retrieve stashed release URL | |
uses: actions/download-artifact@v1 | |
with: | |
name: release-url | |
# Write content of downloaded file (a string which contains the release URL) into a step.outputs variable | |
- name: Read release URL | |
id: get_release_url | |
run: echo ::set-output name=URL::$(cat release-url/url.txt) | |
# This step is only needed because the upload-release-asset currently doesn't support | |
# environment variables. Therefore they must be written and referenced through step.outputs | |
- name: Prepare artifact metadata | |
id: prepare_artifact_metadata | |
env: | |
VERSION: ${{ steps.get_version.outputs.VERSION }} | |
run: | | |
echo ::set-output name=ARTIFACT_PATH::./remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip | |
echo ::set-output name=ARTIFACT_NAME::remoteAudio-$VERSION-${{ matrix.OS }}-${{ matrix.ARCH }}.zip | |
# Finally upload the artifact to the corresponding release | |
- name: Upload Release Artifact ${{ matrix.version }} | |
uses: actions/upload-release-asset@v1.0.1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.get_release_url.outputs.URL }} | |
asset_path: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_PATH }} | |
asset_name: ${{ steps.prepare_artifact_metadata.outputs.ARTIFACT_NAME }} | |
asset_content_type: application/gzip |