Skip to content

autogenerate year when printing remoteAudio version #75

autogenerate year when printing remoteAudio version

autogenerate year when printing remoteAudio version #75

Workflow file for this run

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/[email protected]
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/[email protected]
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