* Query for labeled services as well
* Try scaling down services
* Scale services back up
* Use progress tool from Docker CLI
* In test, label both services
* Clean up error and log messages
* Document scale-up/down approach in docs
* Downgrade Docker CLI to match client
* Document services stats
* Do not rely on PreviousSpec for storing desired replica count
* Log warnings from Docker when updating services
* Check whether container and service labels collide
* Document script behavior on label collision
* Add additional check if all containers have been removed
* Scale services concurrently
* Move docker interaction code into own file
* Factor out code for service updating
* Time out after five minutes of not reaching desired container count
* Inline handling of in-swarm container level restart
* Timer is more suitable for timeout race
* Timeout when scaling down services should be configurable
* Choose better filename
* Reflect changes in naming
* Rename and deprecate BACKUP_STOP_CONTAINER_LABEL
* Improve logging
* Further simplify logging
* Set up documentation site using jekyll
* Add workflow for deploying docs
* Ini formatting is hard to read
* Add instructions on how to run docs locally
* Work through docs
* Remove content from README
* Miscellaneous fixes
* Fix artifact upload
* Scaffold Azure storage backend that does nothing yet
* Implement copy for Azure Blob Storage
* Set up automated testing for Azure Storage
* Implement pruning for Azure blob storage
* Add documentation for Azure Blob Storage
* Add support for remote path
* Add azure to notifications doc
* Tidy go.mod file
* Allow use of managed identity credential
* Use volume in tests
* Auto append trailing slash to endpoint if needed, clarify docs, tidy mod file
* Retry on lock being unavailable
* Refactor locking to return plain error
* Collect LockedTime in stats
* Add test case
* Add documentation for LOCK_TIMEOUT
* Log in case lock needs to be awaited
* Release resources created for awaiting lock