# 5.97. Release Notes for Buildbot 0.9.0b8

The following are the release notes for Buildbot 0.9.0b8 This version was released on April 11, 2016.

See Upgrading to Buildbot 0.9.0 for a guide to upgrading from 0.8.x to 0.9.x

## 5.97.1. Master

### 5.97.1.1. Features

- `GitPoller` now has a `buildPushesWithNoCommits` option to allow the rebuild of already known commits on new branches.

- Add GitLab authentication plugin for web UI. See `buildbot.www.oauth2.GitLabAuth`.

- `DockerLatentWorker` now has a `hostconfig` parameter that can be used to setup host configuration when creating a new container.

- `DockerLatentWorker` now has a `networking_config` parameter that can be used to setup container networks.

- The `DockerLatentWorker` `volumes` attribute is now renderable.

- `CMake` build step is added. It provides a convenience interface to CMake build system.

- MySQL InnoDB tables are now supported.

- `HttpStatusPush` has been ported to reporter API.

- `StashStatusPush` has been ported to reporter API.

- `GithubStatusPush` has been ported to reporter API.

- summaryCB of `GerritStatusPush` now gets not only pre-processed information but the actual build as well.

- EC2LatentWorker supports VPCs, instance profiles, and advanced volume mounts.

### 5.97.1.2. Fixes

- Fix loading `LdapUserInfo` plugin and its documentation (bug #3371).

- Fix deprecation warnings seen with docker-py >= 1.4 when passing arguments to `docker_client.start()`.

- `GitHubEventHandler` now uses the `['repository']['html_url']` key in the webhook payload to populate `repository`, as the previously used `['url']` and `['clone_url']` keys had a different format between push and pull requests and GitHub and GitHub Enterprise instances.

- Fix race condition where log compression could lead to empty log results in reporter api

- Error while applying db upgrade is now properly reported in the buildbot upgrade-master command line.

- Made `Interpolate` safe for deepcopy or serialization/deserialization

- Optimized UI REST requests for child builds and change page.

- Fix `DockerLatentWorker` use of volume parameter, they now properly manage src:dest syntax.

- Fix `DockerLatentWorker` to properly create properties so that docker parameters can be renderable.

- Lock down autobahn version for python 2.6 (note that autobahn and twisted are no longer supporting 2.6, and thus do not receive security fixes anymore).

- Fix docs and example to always use port 8020 for the web ui.

### 5.97.1.3. Deprecations, Removals, and Non-Compatible Changes

- Deprecated `workdir` property has been removed, `builddir` property should be used instead.

- To support MySQL InnoDB, the size of six VARCHAR(256) columns `changes.(author, branch, category, name); object_state.name; user.identifier` was reduced to VARCHAR(255).

- `StatusPush` has been removed from buildbot.

    Please use the much simpler `HttpStatusPush` instead.

### 5.97.1.4. Changes for Developers

Worker changes described in below worker section will probably impact a buildbot developer who uses undocumented ‘slave’ API. Undocumented APIs have been replaced without failover, so any custom code that uses it shall be updated with new undocumented API.

## 5.97.2. Worker

Package buildbot-slave is being renamed buildbot-worker. As the work is not completely finished, neither buildbot-slave==0.9.0b8 or buildbot-worker==0.9.0b8 have been released.

You can safely use any version of buildbot-slave with buildbot==0.9.0b8, either buildbot-slave==0.8.12 or buildbot-slave==0.9.0b7.

## 5.97.3. Transition to “worker” terminology

Since version 0.9.0 of Buildbot “slave”-based terminology is deprecated in favor of “worker”-based terminology.

For details about public API changes see Transition to “worker” terminology in BuildBot 0.9.0.

API changes done without providing fallback:

Old name | New name
--- | ---
`buildbot.buildslave.manager` | `buildbot.worker.manager`
`buildbot.buildslave.manager.BuildslaveRegistration` | `buildbot.worker.manager.WorkerRegistration`
`buildbot.buildslave.manager.BuildslaveRegistration.buildslave` | `buildbot.worker.manager.WorkerRegistration.worker`
`buildbot.buildslave.manager.BuildslaveManager` | `buildbot.worker.manager.WorkerManager`
`buildbot.buildslave.manager.BuildslaveManager.slaves` | `buildbot.worker.manager.WorkerManager.workers`
`buildbot.buildslave.manager.BuildslaveManager.getBuildslaveByName` | `buildbot.worker.manager.WorkerManager.getWorkerByName`
`buildbot.buildslave.docker.DockerLatentBuildSlave` | `buildbot.worker.docker.DockerLatentWorker`
`buildbot.buildslave.local.LocalBuildSlave` | `buildbot.worker.local.LocalWorker`
`buildbot.buildslave.local.LocalBuildSlave.LocalBuildSlaveFactory` | `buildbot.worker.local.LocalWorker.LocalWorkerFactory`
`buildbot.buildslave.local.LocalBuildSlave.remote_slave` | `buildbot.worker.local.LocalWorker.remote_worker`
`buildbot.buildslave.base` module with all contents | `buildbot.worker.base`
`buildbot.buildslave.AbstractBuildSlave.updateSlave` | `buildbot.worker.AbstractWorker.updateWorker`
`buildbot.buildslave.AbstractBuildSlave.slavebuilders` | `buildbot.worker.AbstractWorker.workerforbuilders`
`buildbot.buildslave.AbstractBuildSlave.updateSlaveStatus` | `buildbot.worker.AbstractWorker.updateWorkerStatus`
`buildbot.buildslave.AbstractLatentBuildSlave.updateSlave` | `buildbot.worker.AbstractLatentWorker.updateWorker`
`buildbot.buildslave.BuildSlave.slave_status` | `buildbot.worker.Worker.worker_status`
`buildbot.config.MasterConfig.load_slaves` | `load_workers`
`buildbot.master.BuildMaster.buildslaves` | `buildbot.master.BuildMaster.workers`
`buildbot.process.build.Build.slavebuilder` | `workerforbuilder`
`buildbot.process.build.Build.setSlaveEnvironment` | `setWorkerEnvironment`
`buildbot.process.build.Build.slaveEnvironment` | `workerEnvironment`
`buildbot.process.build.Build.getSlaveCommandVersion` | `getWorkerCommandVersion`
`buildbot.process.build.Build.setupSlaveBuilder` | `setupWorkerForBuilder`
`buildbot.process.builder.Build.canStartWithSlavebuilder` | `canStartWithWorkerForBuilder`
`buildbot.process.slavebuilder.AbstractSlaveBuilder.getSlaveCommandVersion` | `buildbot.process.workerforbuilder.AbstractWorkerForBuilder.getWorkerCommandVersion`
`buildbot.process.slavebuilder.AbstractSlaveBuilder.attached` method argument `slave` was renamed | `worker`
`buildbot.buildslave.AbstractBuildSlave.slave_commands` | `buildbot.worker.AbstractWorker.worker_commands`
`buildbot.buildslave.AbstractBuildSlave.slave_environ` | `buildbot.worker.AbstractWorker.worker_environ`
`buildbot.buildslave.AbstractBuildSlave.slave_basedir` | `buildbot.worker.AbstractWorker.worker_basedir`
`buildbot.buildslave.AbstractBuildSlave.slave_system` | `buildbot.worker.AbstractWorker.worker_system`
`buildbot.buildslave.AbstractBuildSlave.buildslaveid` | `buildbot.worker.AbstractWorker.workerid`
`buildbot.buildslave.AbstractBuildSlave.addSlaveBuilder` | `buildbot.worker.AbstractWorker.addWorkerForBuilder`
`buildbot.buildslave.AbstractBuildSlave.removeSlaveBuilder` | `buildbot.worker.AbstractWorker.removeWorkerForBuilder`
`buildbot.buildslave.AbstractBuildSlave.messageReceivedFromSlave` | `buildbot.worker.AbstractWorker.messageReceivedFromWorker`
`buildbot.process.slavebuilder.LatentSlaveBuilder` constructor positional argument `slave` was renamed | `worker`
`buildbot.process.buildrequestdistributor.BasicBuildChooser.nextSlave` | `nextWorker`
`buildbot.process.buildrequestdistributor.BasicBuildChooser.slavepool` | `workerpool`
`buildbot.process.buildrequestdistributor.BasicBuildChooser.preferredSlaves` | `preferredWorkers`
`buildbot.process.buildrequestdistributor.BasicBuildChooser.rejectedSlaves` | `rejectedSlaves`
`buildbot.steps.shell.ShellCommand.slaveEnvironment` (Note: this variable is renderable) | `buildbot.steps.shell.ShellCommand.workerEnvironment`
`buildbot.status.slave` | `buildbot.status.worker`
`buildbot.status.slave.SlaveStatus` | `buildbot.status.worker.WorkerStatus`
`buildbot.interfaces.IStatusReceiver.slaveConnected` with all implementations | `buildbot.interfaces.IStatusReceiver.workerConnected`
`buildbot.interfaces.IStatusReceiver.slaveDisconnected` with all implementations | `buildbot.interfaces.IStatusReceiver.workerDisconnected`
`buildbot.status.master.Status.slaveConnected` | `buildbot.status.master.Status.workerConnected`
`buildbot.status.master.Status.slaveDisconnected` | `buildbot.status.master.Status.workerDisconnected`
`buildbot.status.master.Status.slavePaused` | `buildbot.status.master.Status.workerPaused`
`buildbot.status.master.Status.slaveUnpaused` | `buildbot.status.master.Status.workerUnpaused`
`buildbot.status.master.Status.buildslaves` | `buildbot.status.master.Status.workers`
`buildbot.status.base.StatusReceiverBase.slavePaused` | `buildbot.status.base.StatusReceiverBase.workerPaused`
`buildbot.status.base.StatusReceiverBase.slaveUnpaused` | `buildbot.status.base.StatusReceiverBase.workerUnpaused`
`buildbot.interfaces.IStatus.getSlaveNames` with all implementations | `buildbot.interfaces.IStatus.getWorkerNames`
`buildbot.interfaces.IStatus.getSlave` with all implementations | `buildbot.interfaces.IStatus.getWorker`
`buildbot.interfaces.IBuildStatus.getSlavename` with all implementations | `buildbot.interfaces.IBuildStatus.getWorkername`
`buildbot.status.build.BuildStatus.setSlavename` | `buildbot.status.build.BuildStatus.setWorkername`
`buildbot.status.build.BuildStatus.slavename` | `buildbot.status.build.BuildStatus.workername` (also it was moved from class static attribute to instance attribute)
`buildbot.interfaces.IBuilderStatus.getSlaves` with all implementations | `buildbot.interfaces.IBuilderStatus.getWorkers`
`buildbot.status.builder.BuilderStatus.slavenames` | `buildbot.status.builder.BuilderStatus.workernames`
`buildbot.status.builder.BuilderStatus.setSlavenames` | `buildbot.status.builder.BuilderStatus.setWorkernames`
`buildbot.process.botmaster.BotMaster.slaveLost` | `buildbot.process.botmaster.BotMaster.workerLost`
`buildbot.process.botmaster.BotMaster.getBuildersForSlave` | `buildbot.process.botmaster.BotMaster.getBuildersForWorker`
`buildbot.process.botmaster.BotMaster.maybeStartBuildsForSlave` | `buildbot.process.botmaster.BotMaster.maybeStartBuildsForWorker`
`buildbot.locks.RealSlaveLock` | `buildbot.locks.RealWorkerLock`
`buildbot.locks.RealSlaveLock.maxCountForSlave` | `buildbot.locks.RealWorkerLock.maxCountForWorker`
`buildbot.protocols.base.Connection` constructor positional argument `buildslave` was renamed | `worker`
`buildbot.protocols.base.Connection.buidslave` | `buildbot.protocols.base.Connection.worker`
`buildbot.protocols.base.Connection.remoteGetSlaveInfo` | `buildbot.protocols.base.Connection.remoteGetWorkerInfo`
`buildbot.protocols.pb.Connection` constructor positional argument `buildslave` was renamed | `worker`

Other changes done without providing fallback:

- Functions argument `buildslaveName` renamed to `workerName`.

- Loop variables, local variables, helper functions:

  Old name | New name
  --- | ---
  `s` | `w` or `worker`
  `sl` | `w` or `worker`
  `bs` (“buildslave”) | `w`
  `sb` | `wfb` (“worker for builder”)
  `bs1()`, `bs2()` | `w1()`, `w2()`
  `bslave` | `worker`
  `BS1_NAME`, `BS1_ID`, `BS1_INFO` | `W1_NAME`, `W1_ID`, `W1_INFO`

- In `buildbot.config.BuilderConfig.getConfigDict` result `'slavenames'` key changed to `'workernames'`; `'slavebuilddir'` key changed to `'workerbuilddir'`; `'nextSlave'` key changed to `'nextWorker'`.

- `buildbot.process.builder.BuilderControl.ping` now generates `["ping", "no worker"]` event, instead of `["ping", "no slave"]`.

- `buildbot.plugins.util.WorkerChoiceParameter` (previously `BuildslaveChoiceParameter`) label was changed from `Build slave` to `Worker`.

- `buildbot.plugins.util.WorkerChoiceParameter` (previously `BuildslaveChoiceParameter`) default name was changed from `slavename` to `workername`.

- `buildbot.status.builder.SlaveStatus` fallback was removed. `SlaveStatus` was moved to `buildbot.status.builder.slave` previously, and now it’s `buildbot.status.worker.WorkerStatus`.

- `buildbot.status.status_push.StatusPush` events generation changed (this module will be completely removed in 0.9.x):

  - instead of `slaveConnected` with data `slave=...` now generated `workerConnected` event with data `worker=...`;

  - instead of `slaveDisconnected` with data `slavename=...` now generated `workerDisconnected` with data `workername=...`;

  - instead of `slavePaused` with data `slavename=...` now generated `workerPaused` event with data `workername=...`;

  - instead of `slaveUnpaused` with data `slavename=...` now generated `workerUnpaused` event with data `workername=...`;

- `buildbot.status.build.BuildStatus.asDict` returns worker name under `'worker'` key, instead of `'slave'` key.

- `buildbot.status.builder.BuilderStatus.asDict` returns worker names under `'workers'` key, instead of `'slaves'` key.

- Definitely privately used “slave”-named variables and attributes were renamed, including tests modules, classes and methods.

### 5.97.3.1. Database

Database API changes done without providing fallback.

Old name | New name
--- | ---
`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves` (rewritten in nine) and `buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslave` (introduced in nine) results uses instead of `'slaveinfo'` key | `'workerinfo'` key
`buildbot.db.model.Model.buildslaves` | `buildbot.db.model.Model.workers`
`buildbot.db.model.Model.configured_buildslaves` | `buildbot.db.model.Model.configured_workers`
`buildbot.db.model.Model.connected_buildslaves` | `buildbot.db.model.Model.connected_workers`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.findBuildslaveId` (introduced in nine) | `buildbot.db.workers.WorkersConnectorComponent.findWorkerId`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.deconfigureAllBuidslavesForMaster` (introduced in nine, note typo `Buidslaves`) | `buildbot.db.workers.WorkersConnectorComponent.deconfigureAllWorkersForMaster`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConfigured` (introduced in nine) | `buildbot.db.workers.WorkersConnectorComponent.workerConfigured`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConfigured` method argument `buildslaveid` was renamed (introduced in nine) | `workerid`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslave` | `buildbot.db.workers.WorkersConnectorComponent.getWorker`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves` method argument `_buildslaveid` was renamed (introduced in nine) | `_workerid`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` (introduced in nine) | `buildbot.db.workers.WorkersConnectorComponent.workerConnected`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` method argument `slaveinfo` was renamed (introduced in nine) | `workerinfo`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` method argument `buildslaveid` was renamed (introduced in nine) | `workerid`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveDisconnected` (introduced in nine) | `buildbot.db.workers.WorkersConnectorComponent.workerDisconnected`
`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveDisconnected` method argument `buildslaveid` was renamed (introduced in nine) | `workerid`
`buildbot.db.builds.BuildsConnectorComponent.getBuilds` method argument `buildslaveid` was renamed (introduced in nine) | `workerid`
`buildbot.db.builds.BuildsConnectorComponent.addBuild` method argument `buildslaveid` was renamed (introduced in nine) | `workerid`
`buildbot.reporters.message.MessageFormatter` template variable `slavename` | `workername`

### 5.97.3.2. Data API

Python API changes:

Old name | New name
--- | ---
`buildbot.data.buildslaves` | `workers`
`buildbot.data.buildslaves.BuildslaveEndpoint` | `WorkerEndpoint`
`buildbot.data.buildslaves.BuildslavesEndpoint` | `WorkersEndpoint`
`buildbot.data.buildslaves.Buildslave` | `Worker`
`buildbot.data.buildslaves.Buildslave.buildslaveConfigured` | `workerConfigured`
`buildbot.data.buildslaves.Buildslave.findBuildslaveId` | `findWorkerId`
`buildbot.data.buildslaves.Buildslave.buildslaveConnected` | `workerConnected`
`buildbot.data.buildslaves.Buildslave.buildslaveDisconnected` | `workerDisconnected`
`buildbot.data.buildslaves.Buildslave.deconfigureAllBuidslavesForMaster` | `deconfigureAllWorkersForMaster`
`buildslaveid` in function arguments and API specification | `workerid`
`slaveinfo` in function arguments and API specification | `workerinfo`

Changed REST endpoints:

Old name | New name
--- | ---
`/buildslaves` | `/workers`
`/buildslaves/n:buildslaveid` | `/workers/n:workerid`
`/buildslaves/n:buildslaveid/builds` | `/workers/n:workerid/builds`
`/buildslaves/:buildslaveid/builds/:buildid` | `/workers/:workerid/builds/:buildid`
`/masters/n:masterid/buildslaves` | `/masters/n:masterid/workers`
`/masters/n:masterid/buildslaves/n:buildslaveid` | `/masters/n:masterid/workers/n:workerid`
`/masters/n:masterid/builders/n:builderid/buildslaves` | `/masters/n:masterid/builders/n:builderid/workers`
`/masters/n:masterid/builders/n:builderid/buildslaves/n:buildslaveid` | `/masters/n:masterid/builders/n:builderid/workers/n:workerid`
`/builders/n:builderid/buildslaves` | `/builders/n:builderid/workers`
`/builders/n:builderid/buildslaves/n:buildslaveid` | `/builders/n:builderid/workers/n:workerid`

Changed REST object keys:

Old name | New name
--- | ---
`buildslaveid` | `workerid`
`slaveinfo` | `workerinfo`
`buildslave` | `worker`
`buildslaves` | `workers`

`data_module` version bumped from `1.2.0` to `2.0.0`.

### 5.97.3.3. Web UI

In base web UI (`www/base`) and Material Design web UI (`www/md_base`) all “slave”-named messages and identifiers were renamed to use “worker” names and new REST API endpoints.

### 5.97.3.4. MQ layer

`buildslaveid` key in messages were replaced with `workerid`.

## 5.97.4. Details

For a more detailed description of the changes made in this version, see the git log itself:

    git log v0.9.0b7..v0.9.0b8