version: 2.1 commands: cmake: description: Configure build steps: - run: name: cmake command: cmake .. working_directory: bin build_source_tarball: description: Build source tarball steps: - run: name: Build source tarball command: ../dist/maketarball.sh working_directory: bin build_rpm: description: Build RPM steps: - run: name: Create rpmbuild directory command: mkdir -p ~/rpmbuild/SOURCES - run: name: Move source tarball command: mv clementine-*.tar.xz ~/rpmbuild/SOURCES working_directory: bin - run: name: Build RPM command: rpmbuild -ba ../dist/clementine.spec working_directory: bin cmake_debian: description: Configure build parameters: distribution: type: string default: xenial arch: type: string default: amd64 steps: - run: name: cmake command: > cmake .. -DWITH_DEBIAN=ON -DDEB_ARCH=<< parameters.arch >> -DDEB_DIST=<< parameters.distribution >> -DFORCE_GIT_VERSION= -DENABLE_SPOTIFY_BLOB=OFF working_directory: bin make_deb: description: Build deb steps: - run: name: make deb command: make -j2 deb working_directory: bin copy_artifacts: description: Copy build artifacts parameters: build: type: string default: ubuntu-xenial steps: - run: name: Create artifact output directory command: mkdir -p /tmp/artifacts/<< parameters.build >> - run: name: Copy deb to artifacts directory command: cp bin/clementine_*.deb /tmp/artifacts/<< parameters.build >>/ - persist_to_workspace: root: /tmp/artifacts paths: - << parameters.build >>/* - store_artifacts: path: /tmp/artifacts/<< parameters.build >> copy_rpm_artifacts: description: Copy build artifcats parameters: build: type: string default: fedora-30 steps: - run: name: Create artifact output directory command: mkdir -p /tmp/artifacts/<< parameters.build >> - run: name: Copy RPM to artifacts directory command: cp ~/rpmbuild/RPMS/*/clementine-*.rpm /tmp/artifacts/<< parameters.build >> - persist_to_workspace: root: /tmp/artifacts paths: - << parameters.build >>/* - store_artifacts: path: /tmp/artifacts/<< parameters.build >> copy_windows_artifacts: description: Copy build artifacts steps: - run: name: Create artifact output directory command: mkdir -p /tmp/artifacts/windows - run: name: Copy exe to artifacts directory command: cp dist/windows/ClementineSetup*.exe /tmp/artifacts/windows - persist_to_workspace: root: /tmp/artifacts paths: - windows/* - store_artifacts: path: /tmp/artifacts/windows install_bionic_dependencies: description: Install Bionic dependencies steps: - run: name: Use AWS Ubuntu mirror command: > sed -i /etc/apt/sources.list -e 's#archive.ubuntu.com#us-east-2.ec2.archive.ubuntu.com#' - run: name: Install Dependencies command: > apt-get update && apt-get install -y build-essential cmake gettext git libasound2-dev libboost-dev libcdio-dev libchromaprint-dev libdbus-1-dev libfftw3-dev libglew1.5-dev libglib2.0-dev libgpod-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev liblastfm5-dev libmtp-dev libprotobuf-dev libpulse-dev libqt5x11extras5-dev libsqlite3-dev libtag1-dev pkg-config protobuf-compiler qtbase5-dev qttools5-dev-tools qttools5-dev libsparsehash-dev ssh install_eoan_dependencies: description: Install Eoan dependencies steps: - run: name: Setup ENV command: | echo 'export DEBIAN_FRONTEND=noninteractive' >> $BASH_ENV source $BASH_ENV - run: name: Use AWS Ubuntu mirror command: > sed -i /etc/apt/sources.list -e 's#archive.ubuntu.com#us-east-2.ec2.archive.ubuntu.com#' - run: name: Install Dependencies command: > apt-get update && apt-get install -y cmake fakeroot gettext git libasound2-dev libboost-dev libboost-serialization-dev libcdio-cdda2 libcdio-dev libchromaprint-dev libcrypto++-dev libdbus-1-dev libfftw3-dev libglew1.5-dev libgpod-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev liblastfm5-dev libmtp-dev libmygpo-qt-dev libplist-dev libprotobuf-dev libpulse-dev libqca-qt5-2-dev libqca-qt5-2-plugins libqt5x11extras5-dev libsparsehash-dev libsqlite3-dev libtag1-dev libusbmuxd-dev protobuf-compiler qtbase5-dev qttools5-dev-tools qttools5-dev ssh install_fedora_dependencies: description: Install Fedora Dependencies steps: - run: name: Install Dependencies command: > dnf install --assumeyes @development-tools alsa-lib-devel boost-devel cmake cryptopp-devel dbus-devel desktop-file-utils fftw-devel gcc-c++ gettext git glew-devel gstreamer1-devel gstreamer1-plugins-base-devel hicolor-icon-theme libappstream-glib libcdio-devel libchromaprint-devel libgpod-devel liblastfm-qt5-devel libmtp-devel libnotify-devel openssh pkgconfig protobuf-compiler protobuf-devel pulseaudio-libs-devel qca-qt5-devel qca-qt5-ossl qt5-devel rpmdevtools sha2-devel sparsehash-devel sqlite-devel taglib-devel tar install_debian_dependencies: description: Install Debian dependencies steps: - run: name: Install Dependencies command: > apt-get update && apt-get install -y build-essential cmake gettext git libasound2-dev libboost-dev libcdio-dev libchromaprint-dev libcrypto++-dev libdbus-1-dev libfftw3-dev libglew1.5-dev libglib2.0-dev libgpod-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev liblastfm5-dev libmtp-dev libmygpo-qt-dev libprotobuf-dev libpulse-dev libqt5x11extras5-dev libsparsehash-dev libsqlite3-dev libtag1-dev pkg-config protobuf-compiler qtbase5-dev qttools5-dev-tools qttools5-dev ssh jobs: build_bionic_64: docker: - image: ubuntu:bionic steps: - install_bionic_dependencies - checkout - cmake_debian: distribution: bionic arch: amd64 - make_deb - copy_artifacts: build: ubuntu-bionic build_bionic_32: docker: - image: i386/ubuntu:bionic steps: - install_bionic_dependencies - checkout - cmake_debian: distribution: bionic arch: i386 - make_deb - copy_artifacts: build: ubuntu-bionic build_eoan_64: docker: - image: ubuntu:eoan steps: - install_eoan_dependencies - checkout - cmake_debian: distribution: eoan arch: amd64 - make_deb - copy_artifacts: build: ubuntu-eoan build_eoan_32: docker: - image: i386/ubuntu:eoan steps: - install_eoan_dependencies - checkout - cmake_debian: distribution: eoan arch: i386 - make_deb - copy_artifacts: build: ubuntu-eoan build_buster_64: docker: - image: debian:buster steps: - install_debian_dependencies - checkout - cmake_debian: distribution: buster arch: amd64 - make_deb - copy_artifacts: build: debian-buster build_stretch_64: docker: - image: debian:stretch steps: - install_debian_dependencies - checkout - cmake_debian: distribution: stretch arch: amd64 - make_deb - copy_artifacts: build: debian-stretch build_fedora_30_64: docker: - image: fedora:30 environment: RPM_BUILD_NCPUS: "2" steps: - install_fedora_dependencies - checkout - cmake - build_source_tarball - build_rpm - copy_rpm_artifacts: build: fedora-30 build_fedora_31_64: docker: - image: fedora:31 environment: RPM_BUILD_NCPUS: "2" steps: - install_fedora_dependencies - checkout - cmake - build_source_tarball - build_rpm - copy_rpm_artifacts: build: fedora-31 build_mingw: docker: - image: eu.gcr.io/clementine-data/mingw-w64:latest environment: PKG_CONFIG_PATH: /target/lib/pkgconfig steps: - checkout - run: name: CMake working_directory: bin command: > cmake .. -DCMAKE_TOOLCHAIN_FILE=../Toolchain-mingw32.cmake -DCMAKE_BUILD_TYPE=Release - run: name: Make working_directory: bin command: make -j2 - run: name: Copy output exes working_directory: dist/windows command: cp ../../bin/*.exe . - run: name: Copy base runtime DLLs command: > cp /usr/lib/gcc/i686-w64-mingw32/*-posix/libgcc_s_sjlj-1.dll /usr/lib/gcc/i686-w64-mingw32/*-posix/libstdc++-6.dll /usr/i686-w64-mingw32/lib/libwinpthread-1.dll ~/project/dist/windows - run: name: Copy DLL dependencies working_directory: /target/bin command: > cp glew32.dll libcdio-16.dll libchromaprint.dll libeay32.dll libfaad.dll libffi-6.dll libfftw3-3.dll libFLAC-8.dll libgcrypt-20.dll libgio-2.0-0.dll libglib-2.0-0.dll libgmodule-2.0-0.dll libgmp-10.dll libgnutls-30.dll libgobject-2.0-0.dll libgpg-error-0.dll libgpod.dll libgstapp-1.0-0.dll libgstaudio-1.0-0.dll libgstbase-1.0-0.dll libgstcontroller-1.0-0.dll libgstfft-1.0-0.dll libgstnet-1.0-0.dll libgstpbutils-1.0-0.dll libgstreamer-1.0-0.dll libgstriff-1.0-0.dll libgstrtp-1.0-0.dll libgstrtsp-1.0-0.dll libgstsdp-1.0-0.dll libgsttag-1.0-0.dll libgstvideo-1.0-0.dll libgthread-2.0-0.dll libhogweed-4.dll libiconv-2.dll libid3tag.dll libintl-8.dll libmad.dll libmms-0.dll libmp3lame-0.dll libnettle-6.dll libogg-0.dll liboil-0.3-0.dll liborc-0.4-0.dll liborc-test-0.4-0.dll libp11-kit-0.dll libplist.dll libpsl-5.dll libprotobuf-17.dll libsoup-2.4-1.dll libspeex-1.dll libspotify.dll libsqlite3-0.dll libtag.dll libtasn1-6.dll libvorbis-0.dll libvorbisenc-2.dll libxml2-2.dll Qt5Concurrent.dll Qt5Core.dll Qt5Gui.dll Qt5Network.dll Qt5NetworkAuth.dll Qt5OpenGL.dll Qt5Sql.dll Qt5Svg.dll Qt5Widgets.dll Qt5WinExtras.dll Qt5Xml.dll Qt5XmlPatterns.dll ssleay32.dll zlib1.dll ~/project/dist/windows - run: mkdir dist/windows/imageformats - run: name: Copy Qt imageformat plugin DLLs working_directory: /target/plugins command: > cp imageformats/qgif.dll imageformats/qjpeg.dll ~/project/dist/windows/imageformats - run: mkdir dist/windows/platforms - run: name: Copy Qt platforms plugin DLLs working_directory: /target/plugins command: > cp platforms/qwindows.dll ~/project/dist/windows/platforms - run: mkdir dist/windows/gio-modules - run: name: Copy GIO modules command: cp /target/lib/gio/modules/libgiognutls.dll dist/windows/gio-modules - run: mkdir dist/windows/gstreamer-plugins - run: name: Copy gstreamer plugins working_directory: /target/lib/gstreamer-1.0 command: > cp libgstapetag.dll libgstapp.dll libgstasf.dll libgstaudioconvert.dll libgstaudiofx.dll libgstaudioparsers.dll libgstaudioresample.dll libgstaudiotestsrc.dll libgstautodetect.dll libgstcdio.dll libgstcoreelements.dll libgstdirectsoundsink.dll libgstequalizer.dll libgstfaad.dll libgstflac.dll libgstgdp.dll libgstgio.dll libgsticydemux.dll libgstid3demux.dll libgstisomp4.dll libgstlame.dll libgstlibav.dll libgstmad.dll libgstmms.dll libgstogg.dll libgstplayback.dll libgstreplaygain.dll libgstsouphttpsrc.dll libgstspectrum.dll libgstspeex.dll libgsttaglib.dll libgsttcp.dll libgsttypefindfunctions.dll libgstudp.dll libgstvolume.dll libgstvorbis.dll libgstwavparse.dll ~/project/dist/windows/gstreamer-plugins - run: name: Build windows installer working_directory: dist/windows command: makensis clementine.nsi - copy_windows_artifacts build_mac: macos: xcode: "11.0.0" steps: - run: name: Setup PATH command: | echo 'export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig' >> $BASH_ENV echo 'export Qt5_DIR=/usr/local/opt/qt5/lib/cmake/Qt5' >> $BASH_ENV echo 'export Qt5LinguistTools_DIR=/usr/local/opt/qt5/lib/cmake/Qt5LinguistTools' >> $BASH_ENV echo 'export GST_SCANNER_PATH=/usr/local/opt/gstreamer/libexec/gstreamer-1.0/gst-plugin-scanner' >> $BASH_ENV echo 'export GST_PLUGIN_PATH=/usr/local/lib/gstreamer-1.0' >> $BASH_ENV source $BASH_ENV - run: name: Unlink Python 2 command: brew unlink python@2 - run: name: Install dependencies from homebrew command: > brew install boost chromaprint cmake cryptopp fftw glew glib google-sparsehash gst-libav gst-plugins-bad gst-plugins-base gst-plugins-good gst-plugins-ugly gstreamer pkgconfig protobuf protobuf-c qt - checkout - run: name: cmake command: > cmake .. -Wno-dev -DCMAKE_BUILD_TYPE=Release -DCMAKE_OSX_ARCHITECTURES=x86_64 -DGETTEXT_MSGMERGE_EXECUTABLE=/usr/local/opt/gettext/bin/msgmerge -DGETTEXT_MSGFMT_EXECUTABLE=/usr/local/opt/gettext/bin/msgfmt -DGETTEXT_XGETTEXT_EXECUTABLE=/usr/local/opt/gettext/bin/xgettext working_directory: bin - run: name: make command: make -j4 working_directory: bin - run: name: Copy icon file and resources command: make install working_directory: bin - run: name: Build DMG command: make dmg working_directory: bin - run: name: Create artifact output directory command: mkdir -p /tmp/artifacts/mac - run: name: Copy dmg to artifacts directory command: cp bin/clementine*.dmg /tmp/artifacts/mac - persist_to_workspace: root: /tmp/artifacts paths: - mac/* - store_artifacts: path: bin/CMakeCache.txt - store_artifacts: path: bin/src/CMakeFiles/clementine.dir - store_artifacts: path: /tmp/artifacts/mac build_source_tarball: docker: - image: ubuntu:eoan steps: - install_eoan_dependencies - checkout - cmake - build_source_tarball - run: name: Create artifacts directory command: mkdir -p /tmp/artifacts/source - run: name: Copy artifact command: cp bin/clementine-*.tar.xz /tmp/artifacts/source - persist_to_workspace: root: /tmp/artifacts paths: - source/* upload_artifacts: docker: - image: google/cloud-sdk steps: - run: name: Google Cloud Auth command: | echo $GCLOUD_SERVICE_KEY | gcloud auth activate-service-account circleci-uploader@clementine-data.iam.gserviceaccount.com --key-file=- gcloud --quiet config set project clementine-data - attach_workspace: at: /tmp/artifacts - run: name: Upload Artifact to Google Cloud command: gsutil rsync -r /tmp/artifacts gs://builds.clementine-player.org/ create_release: docker: - image: circleci/golang:1.12 steps: - attach_workspace: at: /tmp/artifacts - run: name: Aggregate artifacts command: | mkdir -p release_artifacts cp /tmp/artifacts/**/* release_artifacts/ - run: name: Publish Release on GitHub command: | go get github.com/tcnksm/ghr VERSION=${CIRCLE_TAG} ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -delete ${VERSION} release_artifacts/ create_pre_release: docker: - image: circleci/golang:1.12 steps: - attach_workspace: at: /tmp/artifacts - run: name: Aggregate artifacts command: | mkdir -p release_artifacts cp /tmp/artifacts/**/* release_artifacts/ - run: name: Publish Release on GitHub command: | go get github.com/tcnksm/ghr VERSION=$(echo release_artifacts/*.tar.xz | sed -e 's/.*clementine-\(.*\).tar.xz/\1/') ghr -t ${GITHUB_TOKEN} -u ${CIRCLE_PROJECT_USERNAME} -r ${CIRCLE_PROJECT_REPONAME} -c ${CIRCLE_SHA1} -prerelease ${VERSION} release_artifacts/ workflows: version: 2 build_all: jobs: - build_eoan_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_eoan_32: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_bionic_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_bionic_32: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_buster_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_stretch_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_fedora_30_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_fedora_31_64: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_mingw: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_mac: filters: branches: only: master tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - build_source_tarball: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ - create_release: filters: tags: only: /\d+\.\d+\.\d+(rc\d+)?$/ branches: ignore: /.*/ context: github requires: - build_eoan_64 - build_eoan_32 - build_bionic_64 - build_bionic_32 - build_buster_64 - build_stretch_64 - build_fedora_30_64 - build_fedora_31_64 - build_mingw - build_mac - build_source_tarball - create_pre_release: filters: branches: only: master tags: ignore: /.*/ context: github requires: - build_eoan_64 - build_eoan_32 - build_bionic_64 - build_bionic_32 - build_buster_64 - build_stretch_64 - build_fedora_30_64 - build_fedora_31_64 - build_mingw - build_mac - build_source_tarball - upload_artifacts: context: gcp requires: - build_eoan_64 - build_eoan_32 - build_bionic_64 - build_bionic_32 - build_buster_64 - build_stretch_64 - build_fedora_30_64 - build_fedora_31_64 - build_mingw - build_mac - build_source_tarball filters: branches: only: master tags: only: /.*/