-
Notifications
You must be signed in to change notification settings - Fork 24
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
227 additions
and
11 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,217 @@ | ||
name: Cross Platform build | ||
|
||
on: [push, pull_request] | ||
|
||
jobs: | ||
build_linux: | ||
runs-on: ubuntu-18.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 | ||
steps: | ||
- 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-darwin-amd64-${{ github.sha }} | ||
path: ./release | ||
|
||
build_windows: | ||
runs-on: ubuntu-18.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-18.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-18.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', '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: 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 |
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
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