1.0.0
-----
 * Upgrade vertx to version 4.4.6 to bring hot reloading and traffic shaping options (CASSANDRASC-77)
 * Fix unable to stream secondary index files (CASSANDRASC-74)
 * Updates token-ranges endpoint to return additional instance metadata (CASSANDRASC-73)
 * Shade Jackson completely to prevent incompatibility issues (CASSANDRASC-75)
 * Adds endpoint to serve read/write replica-sets by token-ranges (CASSANDRASC-60)
 * Split unit tests and integration tests in CircleCI config (CASSANDRASC-72)
 * Allow configuring permissions for uploaded SSTables (CASSANDRASC-71)
 * Refactor Sidecar configuration (CASSANDRASC-69)
 * Add Client Methods for Obtaining Sidecar and Cassandra Health (CASSANDRASC-70)
 * Publish bytes streamed and written metrics (CASSANDRASC-68)
 * Extract the in-jvm dtest template for use in other projects (CASSANDRASC-55)
 * Fix relocation of native libraries for vertx-client-shaded (CASSANDRASC-67)
 * Enrich RetriesExhaustedException to have more information for better visibility (CASSANDRASC-65)
 * Fix failing unit tests in Apache CI (CASSANDRASC-66)
 * Support credential rotation in JmxClient (CASSANDRASC-63)
 * File descriptor is not being closed on MD5 checksum (CASSANDRASC-64)
 * Expose JMX host and port from JMXClient (CASSANDRASC-59)
 * Support retries in Sidecar Client on Invalid Checksum (CASSANDRASC-58)
 * Ignore unknown properties during Sidecar client deserialization (CASSANDRASC-53)
 * Create staging directory if it doesn't exists (CASSANDRASC-56)
 * Remove RESTEasy (CASSANDRASC-57)
 * Use in-jvm dtest framework for integration tests (CASSANDRASC-51)
 * Sidecar returns own version in node settings (CASSANDRASC-52)
 * Deprecate the sidecar cassandra health endpoint containing instance segment (CASSANDRASC-50)
 * Add an endpoint that gives information about the release version & partitioner name of a node (CASSANDRASC-48)
 * Introduce JMX foundation in Sidecar (CASSANDRASC-47)
 * Delegate methods to the RateLimiter (CASSANDRASC-45)
 * Add Schema API (CASSANDRASC-43)
 * Refactor health check to use vertx timer (CASSANDRASC-44)
 * Migrate minikube to testcontainers for integration tests (CASSANDRASC-46)
 * Refactor range and add toString (CASSANDRASC-41)
 * Fix search in list snapshot endpoint (CASSANDRASC-40)
 * Allow Cassandra input validation to be configurable (CASSANDRAC-39)
 * Add endpoint to list snapshot files (CASSANDRASC-38)
 * Optimize file path builder and have separate handler for streaming file (CASSANDRASC-37)
 * Support for ErrorHandler in Sidecar (CASSANDRASC-36)
 * Allow injecting a LoggerHandler to vertxRouter (CASSANDRASC-34)
 * Optionally support multiple cassandra instances in Sidecar (CASSANDRASC-33)
 * Call the start method of CassandraAdaptorDelegate to start periodic health check (CASSANDRASC-32)
 * Avoid having sidecar's health response code depend on Cassandra's health information (CASSANDRASC-29)
 * Add Stream SSTable API to Sidecar to stream SSTable components through zero copy streaming (CASSANDRASC-28)
 * Fix broken sidecar gradle configuration due to Cassandra 40 version (CASSANDRASC-31)
 * Support multiple Cassandra versions with integration tests using Kubernetes (CASSANDRA-23)
 * RESTEasy integration with dynamically generated Swagger OpenAPI, Swagger UI and JAX-RS (CASSANDRASC-22)
 * Set up asciidoc based documentation (CASSANDRASC-15)
 * Gradle can now generate Deb packages, RPMs and Docker containers (CASSANDRASC-14)
 * Security patch to fix incorrect usage of yaml configuration (CASSANDRASC-12)
 * Build and Test with both Java 8 & 11 in Circle CI (CASSANDRA-15611)
 * Upgraded Gradle and replaced FindBugs with SpotBugs (CASSANDRA-15610)
 * Improving local HealthCheckTest reliability (CASSANDRA-15615)
 * Read sidecar.yaml from sidecar.config System Property instead of classpath (CASSANDRA-15288)
 * Add integration tests task (CASSANDRA-15031)
 * Add support for SSL and bindable address (CASSANDRA-15030)
 * Autogenerate API docs for sidecar (CASSANDRA-15028)
 * C* Management process (CASSANDRA-14395)
