.. _0.9.0b8: 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 :ref:`Upgrading to Nine` for a guide to upgrading from 0.8.x to 0.9.x Master ------ Features ~~~~~~~~ * :class:`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 :class:`buildbot.www.oauth2.GitLabAuth`. * :class:`DockerLatentWorker` now has a ``hostconfig`` parameter that can be used to setup host configuration when creating a new container. * :class:`DockerLatentWorker` now has a ``networking_config`` parameter that can be used to setup container networks. * The :class:`DockerLatentWorker` ``volumes`` attribute is now renderable. * :bb:step:`CMake` build step is added. It provides a convenience interface to `CMake `_ build system. * MySQL InnoDB tables are now supported. * :class:`~buildbot.reporters.http.HttpStatusPush` has been ported to reporter API. * :class:`~buildbot.reporters.stash.StashStatusPush` has been ported to reporter API. * ``GithubStatusPush`` has been ported to reporter API. * `summaryCB` of :bb:reporter:`GerritStatusPush` now gets not only pre-processed information but the actual build as well. * EC2LatentWorker supports VPCs, instance profiles, and advanced volume mounts. Fixes ~~~~~ * Fix loading :class:`~buildbot.ldapuserinfo.LdapUserInfo` plugin and its documentation (:bug:`3371`). * Fix deprecation warnings seen with docker-py >= 1.4 when passing arguments to ``docker_client.start()``. * :class:`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 :class:`Interpolate` safe for deepcopy or serialization/deserialization * Optimized UI REST requests for child builds and change page. * Fix :class:`DockerLatentWorker` use of `volume` parameter, they now propely manage `src:dest` syntax. * Fix :class:`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. 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). * :class:`~buildbot.status.status_push.StatusPush` has been removed from buildbot. Please use the much simpler :class:`~buildbot.reporters.http.HttpStatusPush` instead. 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. 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`. 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 :ref:`Transition-to-worker-terminology`. API changes done without providing fallback: .. list-table:: :header-rows: 1 * - Old name - New name * - :py:mod:`buildbot.buildslave.manager` - :py:mod:`buildbot.worker.manager` * - :py:class:`buildbot.buildslave.manager.BuildslaveRegistration` - :py:class:`buildbot.worker.manager.WorkerRegistration` * - :py:class:`buildbot.buildslave.manager.BuildslaveRegistration.buildslave` - :py:class:`buildbot.worker.manager.WorkerRegistration.worker` * - :py:class:`buildbot.buildslave.manager.BuildslaveManager` - :py:class:`buildbot.worker.manager.WorkerManager` * - :py:attr:`buildbot.buildslave.manager.BuildslaveManager.slaves` - :py:attr:`buildbot.worker.manager.WorkerManager.workers` * - :py:meth:`buildbot.buildslave.manager.BuildslaveManager.getBuildslaveByName` - :py:meth:`buildbot.worker.manager.WorkerManager.getWorkerByName` * - :py:class:`buildbot.buildslave.docker.DockerLatentBuildSlave` - :py:class:`buildbot.worker.docker.DockerLatentWorker` * - :py:class:`buildbot.buildslave.local.LocalBuildSlave` - :py:class:`buildbot.worker.local.LocalWorker` * - :py:attr:`buildbot.buildslave.local.LocalBuildSlave.LocalBuildSlaveFactory` - :py:attr:`buildbot.worker.local.LocalWorker.LocalWorkerFactory` * - :py:attr:`buildbot.buildslave.local.LocalBuildSlave.remote_slave` - :py:attr:`buildbot.worker.local.LocalWorker.remote_worker` * - :py:mod:`buildbot.buildslave.base` module with all contents - :py:mod:`buildbot.worker.base` * - :py:meth:`buildbot.buildslave.AbstractBuildSlave.updateSlave` - :py:meth:`buildbot.worker.AbstractWorker.updateWorker` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.slavebuilders` - :py:attr:`buildbot.worker.AbstractWorker.workerforbuilders` * - :py:meth:`buildbot.buildslave.AbstractBuildSlave.updateSlaveStatus` - :py:meth:`buildbot.worker.AbstractWorker.updateWorkerStatus` * - :py:meth:`buildbot.buildslave.AbstractLatentBuildSlave.updateSlave` - :py:meth:`buildbot.worker.AbstractLatentWorker.updateWorker` * - :py:class:`buildbot.buildslave.BuildSlave.slave_status` - :py:class:`buildbot.worker.Worker.worker_status` * - :py:meth:`buildbot.config.MasterConfig.load_slaves` - :py:meth:`~buildbot.config.MasterConfig.load_workers` * - :py:attr:`buildbot.master.BuildMaster.buildslaves` - :py:attr:`buildbot.master.BuildMaster.workers` * - :py:attr:`buildbot.process.build.Build.slavebuilder` - :py:attr:`~buildbot.process.build.Build.workerforbuilder` * - :py:meth:`buildbot.process.build.Build.setSlaveEnvironment` - :py:meth:`~buildbot.process.build.Build.setWorkerEnvironment` * - :py:attr:`buildbot.process.build.Build.slaveEnvironment` - :py:attr:`~buildbot.process.build.Build.workerEnvironment` * - :py:meth:`buildbot.process.build.Build.getSlaveCommandVersion` - :py:meth:`~buildbot.process.build.Build.getWorkerCommandVersion` * - :py:meth:`buildbot.process.build.Build.setupSlaveBuilder` - :py:meth:`~buildbot.process.build.Build.setupWorkerForBuilder` * - :py:meth:`buildbot.process.builder.Build.canStartWithSlavebuilder` - :py:meth:`~buildbot.process.builder.Build.canStartWithWorkerForBuilder` * - :py:meth:`buildbot.process.slavebuilder.AbstractSlaveBuilder.getSlaveCommandVersion` - :py:meth:`buildbot.process.workerforbuilder.AbstractWorkerForBuilder.getWorkerCommandVersion` * - :py:meth:`buildbot.process.slavebuilder.AbstractSlaveBuilder.attached` method argument ``slave`` was renamed - ``worker`` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.slave_commands` - :py:attr:`buildbot.worker.AbstractWorker.worker_commands` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.slave_environ` - :py:attr:`buildbot.worker.AbstractWorker.worker_environ` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.slave_basedir` - :py:attr:`buildbot.worker.AbstractWorker.worker_basedir` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.slave_system` - :py:attr:`buildbot.worker.AbstractWorker.worker_system` * - :py:attr:`buildbot.buildslave.AbstractBuildSlave.buildslaveid` - :py:attr:`buildbot.worker.AbstractWorker.workerid` * - :py:meth:`buildbot.buildslave.AbstractBuildSlave.addSlaveBuilder` - :py:meth:`buildbot.worker.AbstractWorker.addWorkerForBuilder` * - :py:meth:`buildbot.buildslave.AbstractBuildSlave.removeSlaveBuilder` - :py:meth:`buildbot.worker.AbstractWorker.removeWorkerForBuilder` * - :py:meth:`buildbot.buildslave.AbstractBuildSlave.messageReceivedFromSlave` - :py:meth:`buildbot.worker.AbstractWorker.messageReceivedFromWorker` * - :py:meth:`buildbot.process.slavebuilder.LatentSlaveBuilder` constructor positional argument ``slave`` was renamed - ``worker`` * - :py:attr:`buildbot.process.buildrequestdistributor.BasicBuildChooser.nextSlave` - :py:attr:`~buildbot.process.buildrequestdistributor.BasicBuildChooser.nextWorker` * - :py:attr:`buildbot.process.buildrequestdistributor.BasicBuildChooser.slavepool` - :py:attr:`~buildbot.process.buildrequestdistributor.BasicBuildChooser.workerpool` * - :py:attr:`buildbot.process.buildrequestdistributor.BasicBuildChooser.preferredSlaves` - :py:attr:`~buildbot.process.buildrequestdistributor.BasicBuildChooser.preferredWorkers` * - :py:attr:`buildbot.process.buildrequestdistributor.BasicBuildChooser.rejectedSlaves` - :py:attr:`~buildbot.process.buildrequestdistributor.BasicBuildChooser.rejectedSlaves` * - :py:attr:`buildbot.steps.shell.ShellCommand.slaveEnvironment` (Note: this variable is renderable) - :py:attr:`buildbot.steps.shell.ShellCommand.workerEnvironment` * - :py:mod:`buildbot.status.slave` - :py:mod:`buildbot.status.worker` * - :py:class:`buildbot.status.slave.SlaveStatus` - :py:class:`buildbot.status.worker.WorkerStatus` * - :py:meth:`buildbot.interfaces.IStatusReceiver.slaveConnected` with all implementations - :py:meth:`buildbot.interfaces.IStatusReceiver.workerConnected` * - :py:meth:`buildbot.interfaces.IStatusReceiver.slaveDisconnected` with all implementations - :py:meth:`buildbot.interfaces.IStatusReceiver.workerDisconnected` * - :py:meth:`buildbot.status.master.Status.slaveConnected` - :py:meth:`buildbot.status.master.Status.workerConnected` * - :py:meth:`buildbot.status.master.Status.slaveDisconnected` - :py:meth:`buildbot.status.master.Status.workerDisconnected` * - :py:meth:`buildbot.status.master.Status.slavePaused` - :py:meth:`buildbot.status.master.Status.workerPaused` * - :py:meth:`buildbot.status.master.Status.slaveUnpaused` - :py:meth:`buildbot.status.master.Status.workerUnpaused` * - :py:attr:`buildbot.status.master.Status.buildslaves` - :py:attr:`buildbot.status.master.Status.workers` * - :py:meth:`buildbot.status.base.StatusReceiverBase.slavePaused` - :py:meth:`buildbot.status.base.StatusReceiverBase.workerPaused` * - :py:meth:`buildbot.status.base.StatusReceiverBase.slaveUnpaused` - :py:meth:`buildbot.status.base.StatusReceiverBase.workerUnpaused` * - :py:meth:`buildbot.interfaces.IStatus.getSlaveNames` with all implementations - :py:meth:`buildbot.interfaces.IStatus.getWorkerNames` * - :py:meth:`buildbot.interfaces.IStatus.getSlave` with all implementations - :py:meth:`buildbot.interfaces.IStatus.getWorker` * - :py:meth:`buildbot.interfaces.IBuildStatus.getSlavename` with all implementations - :py:meth:`buildbot.interfaces.IBuildStatus.getWorkername` * - :py:meth:`buildbot.status.build.BuildStatus.setSlavename` - :py:meth:`buildbot.status.build.BuildStatus.setWorkername` * - :py:attr:`buildbot.status.build.BuildStatus.slavename` - :py:attr:`buildbot.status.build.BuildStatus.workername` (also it was moved from class static attribute to instance attribute) * - :py:meth:`buildbot.interfaces.IBuilderStatus.getSlaves` with all implementations - :py:meth:`buildbot.interfaces.IBuilderStatus.getWorkers` * - :py:attr:`buildbot.status.builder.BuilderStatus.slavenames` - :py:attr:`buildbot.status.builder.BuilderStatus.workernames` * - :py:meth:`buildbot.status.builder.BuilderStatus.setSlavenames` - :py:meth:`buildbot.status.builder.BuilderStatus.setWorkernames` * - :py:meth:`buildbot.process.botmaster.BotMaster.slaveLost` - :py:meth:`buildbot.process.botmaster.BotMaster.workerLost` * - :py:meth:`buildbot.process.botmaster.BotMaster.getBuildersForSlave` - :py:meth:`buildbot.process.botmaster.BotMaster.getBuildersForWorker` * - :py:meth:`buildbot.process.botmaster.BotMaster.maybeStartBuildsForSlave` - :py:meth:`buildbot.process.botmaster.BotMaster.maybeStartBuildsForWorker` * - :py:class:`buildbot.locks.RealSlaveLock` - :py:class:`buildbot.locks.RealWorkerLock` * - :py:attr:`buildbot.locks.RealSlaveLock.maxCountForSlave` - :py:attr:`buildbot.locks.RealWorkerLock.maxCountForWorker` * - :py:class:`buildbot.protocols.base.Connection` constructor positional argument ``buildslave`` was renamed - ``worker`` * - :py:attr:`buildbot.protocols.base.Connection.buidslave` - :py:attr:`buildbot.protocols.base.Connection.worker` * - :py:meth:`buildbot.protocols.base.Connection.remoteGetSlaveInfo` - :py:meth:`buildbot.protocols.base.Connection.remoteGetWorkerInfo` * - :py:class:`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: .. list-table:: :header-rows: 1 * - 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 :py:meth:`buildbot.config.BuilderConfig.getConfigDict` result ``'slavenames'`` key changed to ``'workernames'``; ``'slavebuilddir'`` key changed to ``'workerbuilddir'``; ``'nextSlave'`` key changed to ``'nextWorker'``. * :py:meth:`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 :py:class:`buildbot.status.worker.WorkerStatus`. * :py:mod:`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=...``; * :py:meth:`buildbot.status.build.BuildStatus.asDict` returns worker name under ``'worker'`` key, instead of ``'slave'`` key. * :py:meth:`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. Database ~~~~~~~~ Database API changes done without providing fallback. .. list-table:: :header-rows: 1 * - Old name - New name * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves` (rewritten in nine) and :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslave` (introduced in nine) results uses instead of ``'slaveinfo'`` key - ``'workerinfo'`` key * - :py:attr:`buildbot.db.model.Model.buildslaves` - :py:attr:`buildbot.db.model.Model.workers` * - :py:attr:`buildbot.db.model.Model.configured_buildslaves` - :py:attr:`buildbot.db.model.Model.configured_workers` * - :py:attr:`buildbot.db.model.Model.connected_buildslaves` - :py:attr:`buildbot.db.model.Model.connected_workers` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.findBuildslaveId` (introduced in nine) - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.findWorkerId` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.deconfigureAllBuidslavesForMaster` (introduced in nine, note typo ``Buidslaves``) - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.deconfigureAllWorkersForMaster` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConfigured` (introduced in nine) - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.workerConfigured` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConfigured` method argument ``buildslaveid`` was renamed (introduced in nine) - ``workerid`` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslave` - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.getWorker` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.getBuildslaves` method argument ``_buildslaveid`` was renamed (introduced in nine) - ``_workerid`` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` (introduced in nine) - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.workerConnected` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` method argument ``slaveinfo`` was renamed (introduced in nine) - ``workerinfo`` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveConnected` method argument ``buildslaveid`` was renamed (introduced in nine) - ``workerid`` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveDisconnected` (introduced in nine) - :py:meth:`buildbot.db.workers.WorkersConnectorComponent.workerDisconnected` * - :py:meth:`buildbot.db.buildslaves.BuildslavesConnectorComponent.buildslaveDisconnected` method argument ``buildslaveid`` was renamed (introduced in nine) - ``workerid`` * - :py:meth:`buildbot.db.builds.BuildsConnectorComponent.getBuilds` method argument ``buildslaveid`` was renamed (introduced in nine) - ``workerid`` * - :py:meth:`buildbot.db.builds.BuildsConnectorComponent.addBuild` method argument ``buildslaveid`` was renamed (introduced in nine) - ``workerid`` * - :py:class:`buildbot.reporters.message.MessageFormatter` template variable ``slavename`` - ``workername`` Data API ~~~~~~~~ Python API changes: .. list-table:: :header-rows: 1 * - Old name - New name * - :py:mod:`buildbot.data.buildslaves` - :py:mod:`~buildbot.data.workers` * - :py:class:`buildbot.data.buildslaves.BuildslaveEndpoint` - :py:class:`~buildbot.data.workers.WorkerEndpoint` * - :py:class:`buildbot.data.buildslaves.BuildslavesEndpoint` - :py:class:`~buildbot.data.workers.WorkersEndpoint` * - :py:class:`buildbot.data.buildslaves.Buildslave` - :py:class:`~buildbot.data.workers.Worker` * - :py:meth:`buildbot.data.buildslaves.Buildslave.buildslaveConfigured` - :py:meth:`~buildbot.data.workers.Worker.workerConfigured` * - :py:meth:`buildbot.data.buildslaves.Buildslave.findBuildslaveId` - :py:meth:`~buildbot.data.workers.Worker.findWorkerId` * - :py:meth:`buildbot.data.buildslaves.Buildslave.buildslaveConnected` - :py:meth:`~buildbot.data.workers.Worker.workerConnected` * - :py:meth:`buildbot.data.buildslaves.Buildslave.buildslaveDisconnected` - :py:meth:`~buildbot.data.workers.Worker.workerDisconnected` * - :py:meth:`buildbot.data.buildslaves.Buildslave.deconfigureAllBuidslavesForMaster` - :py:meth:`~buildbot.data.workers.Worker.deconfigureAllWorkersForMaster` * - ``buildslaveid`` in function arguments and API specification - ``workerid`` * - ``slaveinfo`` in function arguments and API specification - ``workerinfo`` Changed REST endpoints: .. list-table:: :header-rows: 1 * - 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: .. list-table:: :header-rows: 1 * - Old name - New name * - ``buildslaveid`` - ``workerid`` * - ``slaveinfo`` - ``workerinfo`` * - ``buildslave`` - ``worker`` * - ``buildslaves`` - ``workers`` ``data_module`` version bumped from ``1.2.0`` to ``2.0.0``. 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. MQ layer ~~~~~~~~ ``buildslaveid`` key in messages were replaced with ``workerid``. Details ------- For a more detailed description of the changes made in this version, see the git log itself: .. code-block:: bash git log v0.9.0b7..v0.9.0b8