Merge remote-tracking branch 'origin/dev' into dynamic-blocks-kdev

This commit is contained in:
Konstantin Seiler 2019-11-11 18:28:02 +11:00
commit d237ce7b1b
4 changed files with 115 additions and 3 deletions

View file

@ -6,7 +6,17 @@ rust:
- nightly
cache: cargo
# Reduce cache bloat
before_cache:
- rm -rfv "$TRAVIS_HOME/.cargo/registry/src"
- rm -rfv target/debug/incremental/{librespot,build_script_build}-*
- rm -rfv target/debug/.fingerprint/librespot-*
- rm -rfv target/debug/build/librespot-*
- rm -rfv target/debug/deps/liblibrespot-*
- rm -rfv target/debug/deps/librespot-*
- rm -rfv target/debug/{librespot,liblibrespot}.d
- cargo clean -p librespot librespot-core librespot-connect librespot-audio librespot-metadata librespot-playback
addons:
apt:
packages:
@ -25,6 +35,7 @@ before_script:
script:
- cargo build --locked --no-default-features
- cargo build --locked --examples
- cargo build --locked --no-default-features --features "with-tremor"
- cargo build --locked --no-default-features --features "with-vorbis"
- cargo build --locked --no-default-features --features "alsa-backend"

View file

@ -1,9 +1,28 @@
# Publishing
## How To
The bash script in the root of the project, named `publish.sh` can be used to publish a new version of librespot and it's corresponding crates. the command should be used as follows: `./publish 0.1.0` from the project root, substituting the new version number that you wish to publish. *Note the lack of a v prefix on the version number. This is important, do not add one.* The v prefix is added where appropriate by the script.
## What the script does
This is briefly how the script works:
- Change to branch master, pull latest version, merge development branch.
- CD to working dir.
- Change version number in all files.
- Commit and tag changes.
- Publish crates in given order.
- Push version commit and tags to master.
## Notes
Publishing librespot to crates.io is a slightly convoluted affair due to the various dependencies that each package has on other local packages. The order of publising that has been found to work is as follows:
`protocol -> core -> audio -> metadata -> playback -> connect -> librespot`
The `protocol` package needs to be published with `cargo publish --no-verify` due to the build script modifying the source during compile time.
Publishing can be done using the command `cargo publish` in each of the directories of the respecive crate.
Publishing can be done using the command `cargo publish` in each of the directories of the respective crate.
The script is meant to cover the standard publishing process. There are various improvements that could be made, such as adding options such as the user being able to add a change log, though this is not the main focus, as the script is intended to be run by a CI. Feel free to improve and extend functionality, keeping in mind that it should always be possible for the script to be run in a non-interactive fashion.

View file

@ -15,7 +15,7 @@ _Note: librespot only works with Spotify Premium. This will remain the case for
## Quick start
We're available on [crates.io](https://crates.io/crates/librespot) as the _librespot_ package. Simply run `cargo install librespot` to install librespot on your system. Check the wiki for more info and possible [usage options](https://github.com/librespot-org/librespot/wiki/Options).
After installation, you can run librespot form the CLI using a command such as `librespot -n "Librespot Speaker" -b 192` to create a speaker called _Librespot Speaker_ serving 192kbps audio.
After installation, you can run librespot form the CLI using a command such as `librespot -n "Librespot Speaker" -b 160` to create a speaker called _Librespot Speaker_ serving 160kbps audio.
## This fork
As the origin by [plietar](https://github.com/plietar/) is no longer actively maintained, this organisation and repository have been set up so that the project may be maintained and upgraded in the future.

82
publish.sh Executable file
View file

@ -0,0 +1,82 @@
#!/bin/bash
WORKINGDIR="$( cd "$(dirname "$0")" ; pwd -P )"
cd $WORKINGDIR
crates=( "protocol" "core" "audio" "metadata" "playback" "connect" "librespot" )
function switchBranch {
# You are expected to have committed/stashed your changes before running this.
echo "Switching to master branch and merging development."
git checkout master
git pull
git merge dev
}
function updateVersion {
for CRATE in "${crates[@]}"
do
if [ "$CRATE" = "librespot" ]
then
CRATE=''
fi
crate_path="$WORKINGDIR/$CRATE/Cargo.toml"
crate_path=${crate_path//\/\///}
sed -i '' "s/^version.*/version = \"$1\"/g" "$crate_path"
echo "Path is $crate_path"
done
}
function commitAndTag {
git commit -a -m "Update version numbers to $1"
git tag "v$1" -a -m "Update to version $1"
}
function get_crate_name {
awk -v FS="name = " 'NF>1{print $2; exit}' Cargo.toml
}
function publishCrates {
for CRATE in "${crates[@]}"
do
if [ "$CRATE" = "librespot" ]
then
CRATE=''
fi
crate_path="$WORKINGDIR/$CRATE"
crate_path=${crate_path//\/\///}
cd $crate_path
crate_name=`echo $( awk -v FS="name = " 'NF>1{print $2; exit}' Cargo.toml )`
echo "Publishing $crate_name to crates.io"
if [ "$CRATE" == "protocol" ]
then
# Protocol crate needs --no-verify option due to build.rs modification.
cargo publish --no-verify
else
cargo publish
fi
echo "Successfully published $crate_name to crates.io"
done
}
function updateRepo {
cd $WORKINGDIR
echo "Pushing to master branch of repo."
git push origin master
echo "Pushing v$1 tag to master branch of repo."
git push origin v$1
}
function run {
switchBranch
updateVersion $1
commitAndTag $1
publishCrates
updateRepo $1
echo "Successfully published v$1 to crates.io and uploaded changes to repo."
}
# First argument is new version number.
run $1