Browse Source

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

Konstantin Seiler 4 years ago
parent
commit
d237ce7b1b
4 changed files with 115 additions and 3 deletions
  1. 12 1
      .travis.yml
  2. 20 1
      PUBLISHING.md
  3. 1 1
      README.md
  4. 82 0
      publish.sh

+ 12 - 1
.travis.yml

@@ -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"

+ 20 - 1
PUBLISHING.md

@@ -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.

+ 1 - 1
README.md

@@ -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 - 0
publish.sh

@@ -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