1name: Continuous Deployment 2 3on: 4 push: 5 tags: 6 - 'v*.*.*' 7 8jobs: 9 publish: 10 name: Publishing ${{ matrix.build_target }}-${{ matrix.artifact_type }} 11 runs-on: ${{ matrix.os }} 12 strategy: 13 matrix: 14 build_target: [macos, linux, linux-armhf, linux-armv6] 15 rust: [1.47.0] 16 artifact_type: ['slim', 'default', 'full'] # The build strategy will build all types for each OS specified 17 include: 18 - artifact_type: 'slim' # Slim version has no features enabled by default. 19 feature: '' 20 - artifact_type: 'default' 21 feature: 'dbus_keyring,dbus_mpris' # Default version has all extra features enabled 22 - artifact_type: 'full' 23 feature: 'dbus_keyring,dbus_mpris' # Full version has all extra features and audio backends enabled 24 - build_target: macos 25 os: macos-latest 26 artifact_prefix: macos 27 target: x86_64-apple-darwin 28 - build_target: linux 29 os: ubuntu-latest 30 artifact_prefix: linux 31 target: x86_64-unknown-linux-gnu 32 - build_target: linux-armhf 33 os: ubuntu-18.04 34 artifact_prefix: linux-armhf 35 target: arm-unknown-linux-gnueabihf 36 - build_target: linux-armv6 37 os: ubuntu-18.04 38 artifact_prefix: linux-armv6 39 target: arm-unknown-linux-gnueabihf 40 - build_target: macos 41 artifact_type: slim 42 audio_backend: portaudio_backend 43 - build_target: linux 44 artifact_type: slim 45 audio_backend: pulseaudio_backend 46 - build_target: linux-armhf 47 artifact_type: slim 48 audio_backend: alsa_backend 49 - build_target: linux-armv6 50 artifact_type: slim 51 audio_backend: alsa_backend 52 - build_target: macos 53 artifact_type: default 54 audio_backend: portaudio_backend 55 - build_target: linux 56 artifact_type: default 57 audio_backend: pulseaudio_backend 58 - build_target: linux-armhf 59 artifact_type: default 60 audio_backend: alsa_backend 61 - build_target: linux 62 artifact_type: full 63 audio_backend: pulseaudio_backend,alsa_backend,rodio_backend 64 - build_target: macos 65 artifact_type: full 66 audio_backend: portaudio_backend,rodio_backend 67 - build_target: linux-armhf 68 artifact_type: full 69 audio_backend: alsa_backend 70 exclude: 71 - build_target: linux-armv6 72 artifact_type: 'default' # Raspberry Pi toolchain is too old for dbus/systemd 73 - build_target: linux-armv6 74 artifact_type: 'full' # Raspberry Pi toolchain is too old for dbus/systemd 75 76 steps: 77 - name: Installing Rust toolchain 78 uses: actions-rs/toolchain@v1 79 with: 80 toolchain: ${{ matrix.rust }} 81 target: ${{ matrix.target }} 82 override: true 83 - name: Installing needed macOS dependencies 84 if: matrix.os == 'macos-latest' 85 run: brew install awk dbus pkg-config portaudio 86 - name: Installing needed Ubuntu dependencies 87 if: matrix.os == 'ubuntu-latest' || matrix.os == 'ubuntu-18.04' 88 run: | 89 sudo apt-get update 90 sudo apt-get install -y -qq libasound2-dev libssl-dev libpulse-dev libdbus-1-dev 91 - name: Installing needed Ubuntu armhf dependencies 92 if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armhf' 93 run: | 94 sudo mkdir -p /build/sysroot 95 echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list 96 sudo apt-get update 97 sudo apt-get install -y -qq gcc-arm-linux-gnueabihf libc6-armhf-cross libc6-dev-armhf-cross 98 sudo apt-get download libasound2:armhf libasound2-dev:armhf libssl-dev:armhf libssl1.1:armhf 99 sudo dpkg -x libasound2_*.deb /build/sysroot/ 100 sudo dpkg -x libssl-dev*.deb /build/sysroot/ 101 sudo dpkg -x libssl1.1*.deb /build/sysroot/ 102 sudo dpkg -x libasound2-dev*.deb /build/sysroot/ 103 echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV 104 echo "TEST=abc" >> $GITHUB_ENV 105 echo "RUSTFLAGS=-C linker=arm-linux-gnueabihf-gcc -L/usr/arm-linux-gnueabihf/lib -L/build/sysroot/usr/lib/arm-linux-gnueabihf -L/build/sysroot/lib/arm-linux-gnueabihf" >> $GITHUB_ENV 106 echo "C_INCLUDE_PATH=/build/sysroot/usr/include" >> $GITHUB_ENV 107 echo "OPENSSL_LIB_DIR=/build/sysroot/usr/lib/arm-linux-gnueabihf" >> $GITHUB_ENV 108 echo "OPENSSL_INCLUDE_DIR=/build/sysroot/usr/include/arm-linux-gnueabihf" >> $GITHUB_ENV 109 - name: Installing needed Ubuntu armv6 dependencies 110 if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armv6' 111 run: | 112 sudo mkdir -p /build/sysroot 113 echo "deb [arch=armhf] http://ports.ubuntu.com/ubuntu-ports/ bionic main" | sudo tee -a /etc/apt/sources.list 114 sudo apt-get update 115 sudo apt-get install -y -qq git 116 sudo git -C /build clone --depth=1 https://github.com/raspberrypi/tools.git 117 sudo apt-get download libasound2:armhf libasound2-dev:armhf libssl-dev:armhf libssl1.1:armhf 118 sudo dpkg -x libasound2_*.deb /build/sysroot/ 119 sudo dpkg -x libssl-dev*.deb /build/sysroot/ 120 sudo dpkg -x libssl1.1*.deb /build/sysroot/ 121 sudo dpkg -x libasound2-dev*.deb /build/sysroot/ 122 echo "/build/tools/arm-bcm2708/arm-linux-gnueabihf/bin" >> $GITHUB_PATH 123 echo "PKG_CONFIG_ALLOW_CROSS=1" >> $GITHUB_ENV 124 echo "TEST=abcd" >> $GITHUB_ENV 125 echo "RUSTFLAGS=-C linker=/build/tools/arm-bcm2708/arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc -L/build/tools/arm-bcm2708/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/lib -L/build/tools/arm-bcm2708/arm-linux-gnueabihf/arm-linux-gnueabihf/sysroot/usr/lib -L/build/sysroot/usr/lib/arm-linux-gnueabihf -L/build/sysroot/lib/arm-linux-gnueabihf" >> $GITHUB_ENV 126 echo "C_INCLUDE_PATH=/build/sysroot/usr/include" >> $GITHUB_ENV 127 echo "OPENSSL_LIB_DIR=/build/sysroot/usr/lib/arm-linux-gnueabihf" >> $GITHUB_ENV 128 echo "OPENSSL_INCLUDE_DIR=/build/sysroot/usr/include/arm-linux-gnueabihf" >> $GITHUB_ENV 129 - name: Installing needed Ubuntu armhf dependencies (full) 130 if: matrix.os == 'ubuntu-18.04' && matrix.build_target == 'linux-armhf' && matrix.artifact_type != 'slim' 131 run: | 132 # Make dbus-rs cross-compile, see https://github.com/diwic/dbus-rs/issues/184#issuecomment-520228758 133 sudo apt-get download libdbus-1-dev:armhf libdbus-1-3:armhf libsystemd0:armhf libgcrypt20:armhf liblzma5:armhf liblz4-1:armhf libgpg-error0:armhf 134 sudo dpkg -x libdbus-1-3*.deb /build/sysroot/ 135 sudo dpkg -x libdbus-1-dev*.deb /build/sysroot/ 136 sudo dpkg -x libsystemd0*.deb /build/sysroot/ 137 sudo dpkg -x libgcrypt20_*.deb /build/sysroot/ 138 sudo dpkg -x liblzma5_*.deb /build/sysroot/ 139 sudo dpkg -x liblz4-1_*.deb /build/sysroot/ 140 sudo dpkg -x libgpg-error0_*.deb /build/sysroot/ 141 sudo cp -r /build/sysroot/lib/* /build/sysroot/usr/lib/ 142 sudo ln -frs /build/sysroot/lib/arm-linux-gnueabihf/libdbus-1.so.3 /build/sysroot/lib/arm-linux-gnueabihf/libdbus-1.so 143 sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libgcrypt.so.20 /build/sysroot/lib/arm-linux-gnueabihf/libgcrypt.so 144 sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libgpg-error.so.0 /build/sysroot/lib/arm-linux-gnueabihf/libgpg-error.so 145 sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/liblzma.so.5 /build/sysroot/lib/arm-linux-gnueabihf/liblzma.so 146 sudo ln -rs /build/sysroot/lib/arm-linux-gnueabihf/libsystemd.so.0 /build/sysroot/lib/arm-linux-gnueabihf/libsystemd.so 147 sudo ln -rs /build/sysroot/usr/lib/arm-linux-gnueabihf/liblz4.so.1 /build/sysroot/usr/lib/arm-linux-gnueabihf/liblz4.so 148 sudo mkdir -p /.cargo 149 echo -e '[target.arm-unknown-linux-gnueabihf.dbus]\nrustc-link-lib = ["dbus-1", "gcrypt", "gpg-error", "lz4", "lzma", "systemd"]' | sudo tee -a /.cargo/config 150 - name: Checking out sources 151 uses: actions/checkout@v1 152 - name: Running cargo build 153 uses: actions-rs/cargo@v1 154 with: 155 command: build 156 toolchain: ${{ matrix.rust }} 157 args: --locked --release --target ${{ matrix.target }} --no-default-features --features "${{ matrix.feature }},${{ matrix.audio_backend }}" 158 - name: Packaging final binary 159 shell: bash 160 run: | 161 cd target/${{ matrix.target }}/release 162 tar czvf spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz spotifyd 163 shasum -a 512 spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz > spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.sha512 164 - name: Releasing assets 165 uses: softprops/action-gh-release@v1 166 with: 167 files: | 168 target/${{ matrix.target }}/release/spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.tar.gz 169 target/${{ matrix.target }}/release/spotifyd-${{ matrix.artifact_prefix }}-${{ matrix.artifact_type }}.sha512 170 env: 171 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 172