audacia/.github/workflows/build.yml

322 lines
10 KiB
YAML

name: Build Audacity
on:
push:
# Remove the "#" from the next 2 lines if you need to disable this action
branches:
- disable
pull_request:
# Remove the "#" from the next 2 lines if you need to disable this action
branches:
- disable
jobs:
build:
# =========================================================================
# Run asynchronous builds
# =========================================================================
strategy:
fail-fast: false
matrix:
os: [windows-2019, ubuntu-16.04, ubuntu-18.04, macos-latest]
#os: [macos-latest]
runs-on: ${{ matrix.os }}
env:
USE_AUDACITY_WX: true
steps:
# =========================================================================
# SHARED: Checkout source
# =========================================================================
- name: Checkout
uses: actions/checkout@v2
with:
ref: master
# =========================================================================
# SHARED: Retrieve the commit hash and generate revision header
# =========================================================================
- name: Generate Header
shell: bash
run: |
set -x
# Generate the revision header
git show -s --format="#define REV_LONG \"%H\"%n#define REV_TIME \"%cd\"%n" >src/RevisionIdent.h
# Export the long and short hashs to further steps
echo "::set-env name=LONGHASH::$(git show -s --format='%H')"
echo "::set-env name=SHORTHASH::$(git show -s --format='%h')"
# =========================================================================
# SHARED: Retrieve the wxWidgets source and export the commit hash
# =========================================================================
- name: wxWidgets Hash
shell: bash
run: |
set -x
# Get latest wxWidgets source
git clone --depth 1 -n https://github.com/audacity/wxWidgets
cd wxWidgets
# Export the commit hash to further steps
echo "::set-env name=WXHASH::$(git show -s --format='%H')"
# =========================================================================
# SHARED: Create and/or retrieve wxWidgets cached build
# =========================================================================
- name: Cache wxWidgets
uses: actions/cache@v1
with:
# Increment the number at the end to force recreation of the cache
key: wxWidgets_${{ matrix.os }}_${{ env.WXHASH }}.8
path: wxroot
# =========================================================================
# WINDOWS: Setup Nuget (for all versions of Windows)
# =========================================================================
- name: Setup Nuget
uses: nuget/setup-nuget@v1
if: startswith( matrix.os, 'windows' )
# =========================================================================
# WINDOWS: Build (for all versions of Windows)
# =========================================================================
- name: Build Windows
if: startswith( matrix.os, 'windows' )
shell: cmd
run: |
:: Set up Visual Studio environment
CALL "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
ECHO ON
:: Setup environment
choco install zip
:: Identify wxWidgets installation directory
SET WXWIN=%GITHUB_WORKSPACE%\wxroot
:: Build wxWidgets if needed
IF NOT EXIST %WXWIN% (
MKDIR %WXWIN%
CD wxWidgets
git checkout
git submodule update --init
:: Build it
CD build\msw
nmake -f makefile.vc BUILD=release SHARED=1
IF NOT %ERRORLEVEL% == 0 EXIT %ERRORLEVEL%
CD ..\..
:: "Install" wxWidgets
XCOPY include %WXWIN%\include /E /I /Q /Y
XCOPY lib %WXWIN%\lib /E /I /Q /Y
XCOPY locale %WXWIN%\locale /E /I /Q /Y
XCOPY src %WXWIN%\src /E /I /Q /Y
CD ..
)
:: Build Audacity
CD win
:: Restore packages (for gettext)
nuget restore audacity.sln
:: Build solution
msbuild audacity.sln /m /p:Configuration=Release /p:Platform=Win32
IF NOT %ERRORLEVEL% == 0 EXIT %ERRORLEVEL%
:: "Install" Audacity
MKDIR "%LONGHASH%"
XCOPY Release "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_net_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_vc_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_xml_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_adv_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_core_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_html_*.dll "%LONGHASH%" /E /I /Q /Y
XCOPY %WXWIN%\lib\vc_dll\*u_qa_*.dll "%LONGHASH%" /E /I /Q /Y
CD "%LONGHASH%"
DEL /Q /S *.iobj *.exp *.ilk *.lib *.ipdb *.pdb include
#CD ..
:: Create artifact
zip -r9 "..\..\%LONGHASH%.zip" *
# =========================================================================
# UBUNTU: Build (for all versions of Ubuntu)
# =========================================================================
- name: Build Ubuntu
if: startswith( matrix.os, 'ubuntu' )
shell: bash
run: |
set -x
# Setup environment
sudo apt-get update -y
sudo apt-get install -y libgtk2.0-dev libasound2-dev autoconf automake autogen zip
# Identify wxWidgets installation directory
WXROOT="${GITHUB_WORKSPACE}/wxroot"
# Build wxWidgets if needed
if [ ! -e "${WXROOT}" ]
then
mkdir "${WXROOT}"
cd wxWidgets
git checkout
git submodule update --init
./configure --with-gtk
make -j $(nproc) install DESTDIR="${WXROOT}"
cd ..
fi
# "Install" wxWidgets
sudo cp -a "${WXROOT}"/* /
# Configure Audacity
mkdir bld
cd bld
../configure --with-lib-preference='local system'
# Build lib-src first
#
# This allows using multiple make jobs (-j). If not done this way
# the build may fail (bug in our make process)
cd lib-src
make -j $(nproc)
cd ..
# And then the rest
make -j $(nproc)
# Identify installation directory
DESTDIR="$(pwd)/linux"
mkdir -p "${DESTDIR}"
# Create wrapper script
#
# (This is only needed if using our wxWidgets libs)
cat >"${DESTDIR}/audacity" <<"EOF"
#!/bin/sh
export LD_LIBRARY_PATH="${0%/*}:${LD_LIBRARY_PATH}"
"${0%/*}/audacity.bin"
EOF
chmod +x "${DESTDIR}/audacity"
# Copy over dist files
cp -a audacity "${DESTDIR}/audacity.bin"
cp -aL nyquist plug-ins "${DESTDIR}"
mkdir "${DESTDIR}/help" "${DESTDIR}/locale/"
cp -aL $(find locale/ -type d) "${DESTDIR}/locale/"
# Copy wxWidgets libraries
cp -a "${WXROOT}"/usr/local/lib/*.so* "${DESTDIR}"
# Create artifact (zipped as Github actions don't preserve permissions)
cd "${DESTDIR}"
zip -r9 "${GITHUB_WORKSPACE}/${LONGHASH}.zip" *
# =========================================================================
# MACOS: Build (for all versions of MacOS)
# =========================================================================
- name: Build Mac
if: startswith( matrix.os, 'macos' )
shell: bash
run: |
set -x
# The minimum OS X version supported by Audacity is 10.7.
minver=10.7
# Make the "msgfmt" command available
brew install gettext
brew link --force gettext
# Make sure MacOS supplied commands are used
export PATH="/usr/bin:/usr/sbin:/bin:/sbin:/usr/local/bin"
# Identify wxWidgets installation directory
WXROOT="${GITHUB_WORKSPACE}/wxroot"
# Build wxWidgets if needed
if [ ! -e "${WXROOT}" ]
then
mkdir "${WXROOT}"
cd wxWidgets
git checkout
git submodule update --init
# Make sure our flags are included
export CXX="g++ -std=c++1z -stdlib=libc++"
export LD="g++ -std=c++1z -stdlib=libc++"
# Build x86_64, release, shared configuration
./configure --prefix=/usr/local/x86_64 \
--enable-debug=no \
--enable-macosx-arch="x86_64" \
--enable-shared=yes \
--enable-unicode=yes \
--enable-universal_binary=no \
--enable-webkit=no \
--enable-webviewwebkit=no \
--with-expat=builtin \
--with-flavour="release" \
--with-libjpeg=builtin \
--with-libpng=builtin \
--with-libtiff=builtin \
--with-macosx-version-min="${minver}" \
--with-regex=builtin \
--with-zlib=builtin \
--without-liblzma
${run} make -j $(sysctl -n hw.ncpu) install DESTDIR="${WXROOT}"
unset CXX LD
cd ..
fi
# "Install" wxWidgets
sudo cp -a "${WXROOT}/usr/local" /usr/
# Build Audacity
cd mac
# Temporary workaround until they can be incorporated into
# the Xcode project itself
sed -i '' -e "s/TARGET=10.9/TARGET=${minver}/g" \
-e "s/macosx10.9/macosx/g" Audacity.xcodeproj/project.pbxproj
xcodebuild -configuration Release64 install
cd ..
# "Install" Audacity
mkdir -p macos
cp -a /tmp/Audacity.dst/Audacity.app macos
# Create artifact (zipped as Github actions don't preserve permissions)
cd "/tmp/Audacity.dst"
zip -r9 "${GITHUB_WORKSPACE}/${LONGHASH}.zip" *
# =========================================================================
# SHARED: Attach the artifact to the workflow results
# =========================================================================
- name: Upload artifact
uses: actions/upload-artifact@v1
with:
name: ${{ matrix.os }}_${{ env.SHORTHASH }}
path: ${{ env.LONGHASH }}.zip