This file describes code and packaging changes for all Rok releases starting with Rok 0.15. It is mostly of interest to packagers, administrators, and developers.

Version 1.0 (Platinum)

  • Fix a bug where the account selector in the Rok UI sometimes displayed the incorrect account.
  • Do not display a logout button when logging out is not possible in the Rok UI
  • Fix a bug where Rok API drivers would use the account instead of the user to perform authorization checks for tasks.
  • Fix a bug where the Rok UI would sometimes raise an undefined variable exception after logging in.
  • Fix a bug where the Rok UI would ignore the namespace selected via the Kubeflow dashboard selector
  • Fix a bug where the Rok UI would not render correctly in a Kubeflow environment.
  • Fix a bug where Kubernetes exceptions would not be converted to a Unicode string properly, resulting in the messages of Kubernetes errors not being visible in Rok task logs.
  • Fix a bug where the Rok client would fail to retrieve the user’s ID when using static authentication.
  • Remove secrets from the allowed variables in Rok CSI auto-register URLs.
  • Fix a bug where Rok CSI would fail to auto-register a VolumeSnapshot when the Rok API was using AuthService authentication.
  • Fix a bug where Rok CSI would fail to hydrage a PVC when the Rok API was using AuthService authentication.
  • Give Rok CSI a rok-admin ClusterRole to allow it to access to all Rok accounts.
  • Extend Rok’s provisioning tool for K8s with the –apply mode to avoid questions, skip regeneration of manifests and only apply specified Kustomize packages.
  • Make rok-do fail by default if a path in the host is needed by a task and it does not exist.
  • Replace CommandNotFoundError with CommandOSError, which is more broad and accurate.
  • Fix the logging of byte strings (and the b’...’ prefix) in the cmdutils module.
  • Persist the home directory of user root inside rok-tools by mounting a Docker volume or Kubernetes PVC at /root.
  • Correctly display the account name instead of the user ID in Rok CLI.
  • Move authorization code from the Rok API views to a dedicated backend.
  • Store the Kubernetes namespace UUID in Rok API accounts and verify it matches the one on Kubernetes with every request to prevent accessing resources on Rok after the namespace has been deleted.
  • Add fine-grained authorization to account metadata updates in the Rok API.
  • Introduce the rok-cluster-admin ClusterRole for Rok cluster administrators on Kubernetes.
  • Prevent auto redirect to KF dashboard when the Rok UI is in chooser mode.
  • Bump the version of Istio that Rok’s provisioning tool for K8s installs to 1.5.7.
  • Remove a late import in Rok’s log formatting code, which could cause a deadlock between the log handler’s lock and the Python module import lock during the initialization of the Rok client by Rok CSI.
  • Improve the style of all links in the Rok UI.
  • Display the number of versions in the object list of the Rok UI
  • Migrate githooks to Python 3.
  • Use Angular’s infinite scroll component in the Rok UI.
  • Implement search support for buckets and objects in the Rok UI.
  • Export the Rok client, its error classes and the helpers responsible for querying Rok URLs at the Rok client’s module level.
  • Introduce a helper to the Rok client to list the members of a group.
  • Fix a bug where Rok CSI would sometimes use the incorrect Rok API version when restoring a volume from the Rok URL of a group.
  • Introduce group delete for objects and versions in Rok UI.
  • Improve messaging in UI’s network errors.
  • Suppress C812 Flake8 error, because it doesn’t offer us much and leads to a bit uglier code.
  • Perform retries when setting the versioning status of an S3 bucket, to workaround the fact that the S3 API sometimes returns 404 errors for buckets that have just been created.
  • Suppress E741 Flake8 error, because most monospace fonts already do a good job at showing “l”, “I” and “1” differently.
  • Add a way to lazily evaluate Task attributes in rok-do
  • Introduce rok-dev, a Debian Stretch environment for Arrikto devs.
  • Enable logs in UI’s production builds
  • Fix CRD validation in Istio kustomizations.
  • Provide a ClusterRoleBinding for the rok-admin and rok-cluster-admin ClusterRoles to the rok and rok-operator ServiceAccounts.
  • Fix Githooks random behavior regarding flake8 checks
  • Add support for creating a Docker image with Python 3.5.1 installed.
  • Preserve LC_ALL when running tasks in a remote with rok-do.
  • Build Rok Enterprise Docker images with rok-do
  • Improve rok-dev with support for running rok-do
  • Make Python bindings compatible with Python 3 and ship the corresponding Python 3 packages.
  • Add support for building the Rok Operator Docker image with rok-do.
  • Add support for building the Rok Disk Manager Docker image with rok-do.
  • Add support for building the Rok CSI Docker image with rok-do.
  • Give Rok CSI nodes the rok-admin ClusterRole, to provide them access to all Rok accounts.
  • Reduce configd log spam by rendering config only if member is not up-to-date
  • Improve the Rok API error message when accessing an account for a Kubernetes namespace that does not exist.
  • Fix a bug where the Rok Composer could deadlock while serving simultaneous requests to delete and access a fisk.
  • Support snapshot policies in the Rok GW Jupyter driver.
  • Support snapshot policies in the Rok GW dataset driver.
  • Reduce electiond log spam by watching the master lease without timeout.
  • Preserve query parameters when the namespace changes in Rok UI.
  • Add documentation for cmdutils, as well as a developer guide with examples for some common scenarios.
  • Extend LVMd to report successful snapshot completion.
  • Allow LVMd to recover from an interrupted snapshot.
  • Introduce config variables to setup cron jobs for local/global GC.
  • rok-csi: Add support for garbage collecting LVs and nodelocal fisks owned by LVMd.
  • Remove the “escalate” permission from the Rok Operator/Cluster pods.
  • Fix a bug where the UI was showing the wrong object count when deleting objects.
  • Add a mixin with common helpers for Rok-related tasks in rok-do.
  • Handle existing tags in deployments repo and avoid tagging trunk versions.
  • Handle transient disconnections in a less intrusive way in Rok UI.
  • Introduce a user guide for snapshot and retention policies.
  • Disable msg_delay in text progressbar
  • lvmd: Ensure we delete stale resources under normal operation.
  • rok-csi: Skip GC-ing nodelocal fisks when composer runs in non-nodelocal mode.
  • rok-csi: Improve GC logs.
  • Add a rok-do task to GC old Docker images used by rok-do.
  • Fix a bug where the rok_common.apt Python module would ignore failures to update the APT cache, because apt-get update returns with a 0 exit code.
  • Fine-tune the update strategy for rok-disk-manager and rok-kmod DaemonSets so that they can be upgraded in parallel.

Version 0.15.1 (Onyx)

  • Move docs out of the CMake build system.
  • Make the building of docs depend on version-specific manifests.

Version 0.15 (Onyx)

  • manifests: Use latest kmod image and kubeflow/manifests
  • Revamp the instructions to test a Rok installation on EKS
  • doc: Use proper mount for Docker
  • doc: Add deploy overlays to EKS guide manual option
  • doc: Update instructions of building the rok-kmod image
  • manifests: Add .cache kfctl folder to gitignore
  • Enhance guides of onboarding and release procedure
  • cli: Store logs under ~/.rok/log
  • operator: Fix bug with stale cluster config
  • Add instructions to configure the Kubernetes namespaces and RBAC rules after installing a Rok cluster in EKS
  • scripts: Fix tag creation in manifests script
  • rok-kmod: Update Dockerfile.local with missing kernel
  • Restore all Rok probes except the one used by the Rok appliance to Python 3
  • conf: Set master_capable to True on k8s
  • deploy: Provision auth components
  • doc: Treat warnings as errors when building with Makefile
  • Fix an invalid JSON document in the EKS installation docs
  • scripts: Make manifests script adopt existing repos
  • doc: Mention EKF instead of MiniKF
  • doc: Do not copy the results when user select text
  • manifests: Use string replacement instead of jinja2 templating
  • kmod: Don’t start a progress bar if there are no modules to install
  • gw: Always display cancel button in services form
  • Static rok and ekf themes
  • doc: Do not copy the results shown in blocks
  • gw: Move namespace selector into its own component
  • doc: Update Kubeflow integration doc
  • Hide and show code blocks in docs
  • Make our manifests templates and have bases only refer to proper image tags
  • Introduce a developer guide for the Kubernetes client’s initialization
  • Fix a bug in the Kubernetes Rok API drivers that caused SubjectAccessReview requests to sometimes fail with an unauthorized error
  • doc: AuthService Integration
  • k8s: Configure dockerconfig with rok-deploy
  • Introduce the v2 services and OAuth APIs in Rok, to allow Rok clients to interact with any account instead of only the one matching their user UUID
  • Include CMake>=3.8.2 as new a build dependency since we make use of the COMMAND_EXPAND_LISTS option of add_custom_command.
  • Make AuthService authentication the default in Kubernetes
  • Introduce the AUTHORIZATION_BACKEND setting for the Rok API to control the way requests are authorized
  • Convert all Rok API authentication backend names to lowercase
  • Rename the static-authservice authentication backend to authservice in the Rok API
  • Fix custom fonts in doc
  • Further improve Python 3 compatibility
  • doc: Use in our public docs
  • Make Kubeflow-UserID the default user header when using AuthService authentication in the Rok API
  • doc: Improve doc on Kubeflow’s integration with GitLab
  • Fix services request with namespaces
  • Enhance Kubeflow integration and use ekf overlays in KfDef
  • doc: Fix broken copy button
  • manifests: Move Rok manifest to its proper place
  • Revert Rok probes to Python 2 to workaround missing dependencies for the Rok cluster probe
  • Make the Rok etcd3 client compatible with Python 3
  • Automatically allow access to Rok API resources to users that have access to Kubeflow resources in the same Kubernetes namespace
  • doc: Add absolute URL in snippet commands
  • cmake: Separate ctypesgen preprocessor flags
  • k8s: Refactor manifests
  • Fix a bug in the Rok S3 daemon template
  • Build custom dex image
  • Enable the Rok API and UI to run behind Istio with AuthService authentication
  • common: Detect dirty repo and return trunk version
  • k8s: Make Redis probe Python3-compatible
  • etcd: Add Python3 package for v3
  • doc: Extend docs and add integrations
  • Enable building reproducible rok-kmod images locally
  • kmod: Fix typo in Ubuntu PPA Dockerfile
  • rok-tools: Serve Rok’s public docs
  • rok-kmod: Use rok-kmod debian package in rok-kmod’s Dockerfile
  • githooks: Exclude from Copyright check
  • debian: Introduce rok-kmod package
  • rok-kmod: Convert to Python3 and introduce python package
  • doc: Make public docs customer-friendly
  • common: Properly dump to file in current dir
  • k8s: Introduce rok-deploy
  • probes: Make probes library Python3 compatible
  • doc: Change doc’s layout
  • common: Open dump_to_file in text mode by default
  • Mention bootstrapping in the docs
  • Make a number of small fixes to the Rok client to ensure our CI tests pass after transitioning to Python 3
  • ci: Configure locale inside chroot
  • Update the botocore dependency of the Rok AWS library to 1.12.103
  • Integrate Rok with ctypesgen 1.0.2
  • doc: Fix broken copy button image in nested docs
  • Support mass deletion in the Rok UI
  • Revamp the initialization of The Rok S3 daemon to identify deployment errors as soon as possible
  • Introduce formatting and validation to all Rok PUs
  • Correctly include the Rok Tools template in the docs
  • kmod: Build reproducible rok-kmod images
  • doc: Do not copy/link sources in public docs
  • Minor fixes in the Python wheels doc
  • Fix error reporting in Python 3 in the Rok client
  • kmod: Find available custom modules
  • Give to modules installed by rok-kmod the highest priority
  • Introduce instructions for EKS
  • Add design document about the formatting and validation of Rok daemons
  • Introduce kustomize overlays for EKS
  • Introduce Rok Tools
  • doc: Make various adjustments to the rok-do guide
  • Avoid retrying all available methods of retrieving security credentials when updating them in the Rok S3 daemon
  • Support reading values from a file in the Rok C argument parser
  • Display bucket descriptions in the Rok UI
  • Prepare towards Python3 packages
  • rokfs: Make ioctl prototype conditional
  • operator: Set/apply cluster config
  • Allow deleting a specific bucket or all buckets of a Rok cluster using the Rok AWS helper scripts
  • Make rok_cluster an optional dependency of rok_aws
  • Add entrypoints for AWS helper scripts
  • Add AWS C++ SDK to rok-do build dependencies
  • cmake: Use -Og on Debug and fix ctypesgen flags
  • k8s: Use rok-probed in initContainers
  • Make the Rok commmon helpers converting strings to bytes and Unicode Python 3 compatible
  • doc: Add Rok upgrade guides for K8s
  • Disable Fort signups
  • operator: Cluster-neutral logging
  • scripts: Allow purging multiple S3 buckets at once
  • Add search support in Rok UI
  • rdm: Activate the LVs when loading a VG/LV
  • Check if the source directory exists when adding Python tests in CMake
  • gw: Display the number of versions in objects list
  • gw: Change link style across the Rok UI
  • Update rok-do instructions
  • cmdutils: Add check and log_error to wait()
  • bootstrap: Improve validation
  • k8s: Treat configVars as object
  • cmake: Add non-bootstrapped env as possible failure reason
  • libredis: Implement scanning keys and batch deletions
  • libtasks: Fixes and support for disabling logging to frontend
  • Remove a stale file
  • Add support for the IAM Roles for Service Accounts feature of EKS to the Rok S3 daemon
  • Add a design document explaining in detail the way Rok pods gain access to AWS services when running within an EKS cluster
  • Improve handling of time durations in timeutils
  • Add script to attach an IAM role to the Rok service inside an EKS cluster
  • Add script to purge an S3 bucket
  • rok_args: Do not set dest for Sensitive arg
  • libredis: Fix various bugs
  • gw: Disable group toggle button when group is empty
  • Add bootstrap and get build version with Python
  • gw: Remove created info from task popover
  • dm clone: Fix discard handling and overflow bugs which could cause data corruption
  • operator: Add helpers to get CR info as rok-init metadata
  • Add new tooltip messages
  • Introduce file badge component in Rok UI
  • githooks: Use relative paths for symlinks
  • scripts: Fix a check for enabled githooks
  • Fix various issues related to double reclassing
  • Add guidelines for testing to the Rok documentation
  • Add script to attach EBS volumes to a Kubernetes cluster
  • Add perf tests for libfiber
  • gw: Use bigger icons in services header
  • Introduce new delete dialogs in UI
  • Fix monospace and bold in UI
  • Styles changes in authorizations page in UI
  • Minor Kubernetes-related fixes
  • libredis: Refactor code and support retries
  • conf: Fix ip_reachable and remove default gateway verification
  • Correctly initialize the Rok 0.15 client in MiniKF
  • Update the MiniKF kustomize templates and wheels
  • blkutils: Add –force for RAID devices with 1 drive
  • Improve reporting of sizes in CLIs
  • config: Factor out DLM lock break
  • Fix and upgrade custom tensorflow images
  • Update the Dockerfile used to produce the notebook image to create the required Python wheels using rok-do
  • Make rok-do less noisy in case of errors
  • conf: Support disabling host header check
  • libredis: Enforce redis scheme
  • scripts: Improve add_signature() to work on rebase
  • Update Rok K8s guides
  • operator: Support cluster upgrades
  • End-to-end building of Python wheels with rok-do
  • operator: Retrieve secrets from CR
  • Add generic helpers to get, list, and retrieve the owners of resources to the Rok Kubernetes client.
  • libmap: Migrate epoch cache to Redis
  • Keep logs in case cronic fails
  • Do not deepcopy service params to increase the performance of service-related API calls
  • operator: Remove hardcoded cluster refs
  • rok-csi: Recover volumes from deleted nodes
  • libredis: Introduce connection pool
  • Add a simple graph implementation to the Rok common module
  • kustomize: Manage Rok Storage/VolumeSnapshot classes
  • trpt: Print message when magic number is invalid
  • rok-init: Add basic support for upgrading clusters
  • operator/kustomize: Add Redis endpoint
  • appliance: Add redis endpoint
  • operator: Fix bug in member removal
  • doc: Update stretch build dependencies
  • python/pu: Check PU status before releasing objects
  • python: Replace select() with poll()
  • Search for ext2/ext3/ext4 libraries in CMake
  • Add a bucket icon in Rok UI’s breadcrumb trail
  • Fix dependency to the PyYAML package in the Rok Kubernetes client
  • kustomize: Introduce Redis
  • Correctly display access tokens which were issued without an application
  • libredis: Introduce a Redis library
  • electiond: Improve detecting master changes
  • operator: Fix typo in postgresql_probe()
  • Specify arbitrary device attributes for CSI volumes
  • Reduce LU-oriented lock contention in the I/O path
  • csi: Start dm-clone monitoring threads after successfully initializing lvmd
  • csi: Fix imports
  • lvmd: Fix imports
  • lvmd: Don’t snapshot discarded blocks
  • Do not retry ENOENT on get_ca()
  • gw: Refactor objects and versions list in UI
  • doc: Fix indentation errors
  • conf: Remove the templates and the from etcd
  • Fix a bug where tasks would never be finalized if they contained a value that cannot be JSON serialized
  • Use common’s document view component in event info page
  • conf: Do not use hostname as member ID fallback
  • conf: Support config annotations
  • k8s: Extend cluster CRDs with status
  • gw: Fix imports in webpack’s dev config
  • Use common form component in Rok UI
  • rdm: Support parsing and applying scripts line-by-line
  • minikf: Some libtask fixes before updating provisioning script
  • Use only scoped imports in UI
  • common: Relax type restriction in format_duration
  • common: Update copyright date in UI
  • lvmd: Add support for replicated volumes
  • Convert utility class in UI
  • Fix a bug when waiting for a failed task in the Rok client
  • Factor out our internal Kubernetes client
  • common: Add Python functions to calculate versions
  • Introduce two new probes to test the readiness of an etcd and PostgreSQL deployment
  • Add options to wait until a readiness probe succeeds or a liveness probe fails
  • conf: Support atomic config apply
  • common: Revamp error service in UI
  • Replace prettytable with printutils
  • Change position strategy in UI
  • libtrpt: Minor performance optimization
  • Fix some minor email issues in Registry
  • Deploy Rok Registry with Istio on Minikube/GKE
  • operator: Rework init container cmds
  • thrower: Work with any lz4 version
  • lvmd: Properly close the data device
  • operator: Graceful termination
  • Make retention policies in the Rok API return accurate information about group members and cleanup orphan group members.
  • blkutils: Fix using get_disks() with glob
  • lvmd: Fix progress reporting
  • libtrpt: Fix high completion latencies
  • doc: Update LVMD design document
  • common: Create a password helper
  • composer: Use 1MiB chock size as default
  • Always display snapshot policies section in UI
  • common: Use different connection strategy in tooltip
  • Improve Rok UI’s loading screen
  • common: Do not autodetect if we are in container, be explicit
  • Close the Pyro daemon before stopping the thrower
  • dm-clone: Backport upstream patches
  • libmap: Support batched epoch updates
  • common: Add missing prefix in UI’s HTTP client
  • Add Kubernetes PodSecurityPolicy Integration Design Doc
  • Angular and dependencies upgrade
  • indexer: Remove auth token in some API requests
  • ci: Increase dm-clone region size in lvmd tests
  • blkutils: Fix how we parse mountinfo in get_mountinfo()
  • Disable ASan’s LeakSanitizer for tests
  • Do not define min() and max() macros in C++, since they are already defined as funtions.
  • Update the instructions to build a Jupyter notebook
  • Update the Jupyter notebook Dockerfile to include Tensorflow 1.14.0, Python 4 wheels for the Rok client and the latest Kubeflow ml-pipelines Kale, and Kale Jupyterlab plugin.
  • scripts: Allow passing minus tags in rok-buildbot
  • lvmd: Discover volume mount points automatically, instead of providing them explicitly in take_snapshot()
  • Add helper to wait for a task to the Rok client
  • Rename the Rok client and its errors to RokClient and RokClientError respectively
  • Parse credentials and service parameters from a file in the Rok client
  • Parse credentials and service parameters from the environment in the Rok client
  • Provide authentication credentials during initialization in the Rok client
  • lvmd: Support encrypted volumes
  • Fix a bug where Rok API installations would raise internal errors when when accessing old delete marker versions due to migration v001400_0002 incorrectly introducing a number of attributes that should only exist in non-delete marker versions
  • Specify the minimum Gevent version that is supported
  • Detect Rok build type and skip lvmd CI tests
  • Add shared memory transport
  • Fix some prettytable dependency issues
  • Improve HTTP response handling in UI
  • minikf: Merge questions with CLI args
  • dlm: Use force_str() on strings passed to C calls
  • Support logging to the frontend from anywhere
  • liod: Rescan SCSI bus periodically
  • Add a role and role binding to MiniKF users to enable Rok API tasks to access Kubeflow resources
  • Add a PodDefault to allow the MiniKF’s default user to access the Rok API from within the Kubeflow namespace
  • operator: Replace Threads with Greenlets
  • lvmd: Use dm-clone only when restoring a volume from a snapshot, not for fresh volumes
  • conf: Fix a bug where an undefined var was referenced
  • csi: Do not start dm-clone monitor threads on controller
  • Fix the MiniKF deployment and its QA process
  • lvmd: Remove mostly unused dyn_params parameter
  • Make cmdutils compatible with Python 3
  • common: Do not import subprocess32 when using Python3
  • roke: Fix dots in member IDs and stopping md devices
  • Refactor lvmd to improve code readability and maintainability
  • operator: Handle nodeSelector and node labels
  • minikf: Track latest wheels
  • githooks: Fix a bug when checking config version
  • gw: Make the Rok gateway UI pass Prettier checks
  • lvmd: Support variable dm-era tracking granularity
  • Add support for building Python 3 wheels for the Rok client
  • Make the Rok client Python 3 compatible
  • Make the rok_common library Python 3 compatible
  • New icons in Rok UI
  • doc: Add copy buttons in all doc’s code blocks
  • pu: connect all PUs to the external controller by default
  • lvmd: Introduce DM snapshots
  • test: Set start_new_session instead of new_session
  • Use HttpClient in Rok Registry UI
  • ci: Fix hashing test to consider duplicate offsets
  • rdm: Add support for RAID arrays
  • rdm: Export attributes of block devices
  • tests: Fix leaks discovered by ASan
  • cmake: Use correct soversion for libetcd3
  • Add JSON and CSV output format to the Rok client
  • rok-do: Introduce rok-do CLI tool
  • doc: Use correct apt files on source install guides
  • gw: Dynamically resize file chooser window
  • Add extra validation checks in Rok Gateway
  • docker: Add missing syslog argument
  • Implement dialog for copying files
  • cmdutils: Support Popen kwargs and remove some shell=True commands
  • operator: Fix an operator regression wrt platforms
  • operator: Uniformely sync resources
  • conf: Improve diffing support and move it under rok_common
  • gw: Add a Django cache to cache the chock size
  • operator: Produce events on cluster CR
  • cli: Add QuestionContext and expose question threshold through args
  • operator: Always refresh cluster driver cache
  • lvmd: Add support for configuring the snapshot chunk size
  • libtasks: Separate null and empty answers and add boolean-type question
  • Switch to Stretch builds
  • Deploy Rok Registry using Rok Operator
  • Remove deprecated Http class from UI
  • Fix rok-init bugs
  • Allow Fort to filter LDAP users by group
  • doc: Extend Sphinx configuration to include versioned manifests from a specified path

Version 0.14.1 (Nephrite)

Version 0.14 (Nephrite)

Version 0.13 (Marble)

Version 0.13-rc1 (Marble)

Version 0.12 (Lignite)

Version 0.12-rc1 (Lignite)

Version 0.11.1 (Kryptonite)

Version 0.11 (Kryptonite)

Version 0.11-rc1 (Kryptonite)

Version 0.10.3 (Jade)

Version 0.10.2 (Jade)

Version 0.10.1 (Jade)

Version 0.10 (Jade)

Version 0.10-rc1 (Jade)

Version 0.9 (Iron)

Version 0.9-rc3 (Iron)

Version 0.9-rc2 (Iron)

Version 0.9-rc1 (Iron)

Version 0.8.1 (Hematite)

Version 0.8 (Hematite)

Version 0.8-rc1 (Hematite)

Version 0.7.2 (Granite)

Version 0.7.1 (Granite)

Version 0.7 (Granite)

Version 0.7-rc2 (Granite)

Version 0.7-rc1 (Granite)

Version 0.6.2 (Flint)

Version 0.6.1 (Flint)

Version 0.6 (Flint)

Version 0.6-rc4 (Flint)

Version 0.6-rc3 (Flint)

Version 0.6-rc2 (Flint)

Version 0.6-rc1 (Flint)

Version 0.5 (Emerald)

Version 0.5-rc1 (Emerald)

Version 0.4.5 (Diamond)

Version 0.4.4 (Diamond)

Version 0.4.3 (Diamond)

Version 0.4.2 (Diamond)

Version 0.4.1 (Diamond)

Version 0.4 (Diamond)

Version 0.3 (Celestite)

Version 0.2 (Beryl)

Version 0.2-rc1 (Beryl)

Version 0.1 (Amethyst)

Version 0.1-rc1 (Amethyst)