|
| 1 | +Bob 0.24 Release Notes |
| 2 | +====================== |
| 3 | + |
| 4 | +Changes made since Bob 0.23.0 include the following. |
| 5 | + |
| 6 | +Upcoming 1.0 release |
| 7 | +-------------------- |
| 8 | + |
| 9 | +In preparation for a 1.0 release, the following changes are planned: |
| 10 | + |
| 11 | +* :ref:`configuration-bobMinimumVersion` will be raised to ``0.16``. Projects |
| 12 | + with a lower version will be rejected. |
| 13 | +* All policies up-to and including version ``0.16`` will be removed. |
| 14 | +* Plugins targeting API versions before ``0.15`` will refuse to load. |
| 15 | +* The :ref:`configuration-recipes-filter` keyword will be removed. |
| 16 | + |
| 17 | +Bob will now issue a warning if a project or any of its plugin targets a too |
| 18 | +old version. Starting with the 0.25 development cycle, the above changes will |
| 19 | +be applied. |
| 20 | + |
| 21 | +New features |
| 22 | +------------ |
| 23 | + |
| 24 | +* Added support for mirrors for URL SCMs. |
| 25 | + |
| 26 | + In the user configuration, any number of mirrors can be added. There are two |
| 27 | + types of mirrors: *pre-mirrors* which are checked before the primary location |
| 28 | + of the recipe and *fallback-mirrors* that are used if the primary location |
| 29 | + failed. Such mirrors are only used for deterministic URL SCMs, though. |
| 30 | + |
| 31 | + Optionally, Bob can also upload files to the mirror(s) during the build. |
| 32 | + This is especially useful when configuring a local directory in the per-user |
| 33 | + Bob configuration to cache external downloads locally across multiple |
| 34 | + projects. |
| 35 | + |
| 36 | + See :ref:`configuration-config-mirrors` for more details. (:issue:`360`) |
| 37 | +* Bob gained support for nested SCMs. |
| 38 | + |
| 39 | + This adds support to checkout an SCM into a subdirectory of another SCM in |
| 40 | + the same recipe. This requires that the SCM with the upper directory is first |
| 41 | + in the list before any other SCMs in subdirectories. Additionally, SCMs that |
| 42 | + are natively supported by Jenkins plugins (git, svn), cannot be nested into |
| 43 | + the other SCMs (cvs, import, url). The reason is that Jenkins SCM plugins |
| 44 | + always execute before anything else in a Jenkins job. |
| 45 | + |
| 46 | + This relaxes the rules that did not allow any nesting before. There are some |
| 47 | + drawbacks of such setups. Namely, if an SCM is moved to the attic, all their |
| 48 | + nested SCMs are affected too. |
| 49 | +* Recipes and classes can use a new file inclusion syntax: ``$<@...@>``. For |
| 50 | + each matched file, the script will see a (possibly temporary) file with its |
| 51 | + content. The order of files is sorted by the original file name. See |
| 52 | + :ref:`configuration-recipes-scripts` for more details. |
| 53 | +* Bare file names in URL SCMs now undergo tilde expansion. This replaces the |
| 54 | + initial ``~`` or ``~user`` by the *user*’s home directory. |
| 55 | +* A number of user configuration entries can now be changed incrementally |
| 56 | + instead of replacing them completely: |
| 57 | + |
| 58 | + * Added support to remove builtin :ref:`configuration-config-whitelist` |
| 59 | + entries. The new :ref:`configuration-config-whitelistremove` key in |
| 60 | + default.yaml removes entries from the whitelist. It has a higher precedence |
| 61 | + than adding whitelist entries. It is not an error to remove non-existent |
| 62 | + whitelist entries. (:issue:`534`) |
| 63 | + * The new :ref:`configuration-config-archive-prepend-append` keys update the |
| 64 | + archive list by either prepending to the current list or appending to it. |
| 65 | + The previously defined archives are retained. |
| 66 | + |
| 67 | +* The file mode of downloaded file with the URL SCM can now be specified by the |
| 68 | + ``fileMode`` attribute. Because the handling was inconsistent between local |
| 69 | + and network files, a new policy was introduced: |
| 70 | + :ref:`policies-defaultFileMode`. If set to the new behaviour, also locally |
| 71 | + copied files will get a predictable file mode (``0600``) instead of retaining |
| 72 | + the source file mode. |
| 73 | +* Bob gained an extended option to always checkout in Jenkins jobs. |
| 74 | + |
| 75 | + The "scm.always-checkout" extended option has been added which defaults to |
| 76 | + "true". If enabled, checkout steps will always be executed. This knob is |
| 77 | + intended to increase the robustness and eagerly expose problems in recipes |
| 78 | + whose checkout is not fully stable. If the user wants to rely defer |
| 79 | + checkouts until necessary to speed up builds, the scm.always-checkout option |
| 80 | + can disabled manually. (:ref:`bob-jenkins-extended-options`) |
| 81 | + |
| 82 | + |
| 83 | +Improvements |
| 84 | +------------ |
| 85 | + |
| 86 | +* Better handling of git recipe changes when commit and branch are both |
| 87 | + specified. Unless the recipe is changed, Bob will not compare the |
| 88 | + current commit any more in existing checkouts. This makes sure that |
| 89 | + temporary changes during development do not fail the build. |
| 90 | + |
| 91 | + If the recipe is changed, Bob now compares the configured commit just with |
| 92 | + with state of the workspace if the repository was already cloned. The check |
| 93 | + whether the commit is also on the branch is only done on the initial clone. |
| 94 | + This makes it easier for a developer to adapt the repository and the recipe |
| 95 | + without being forced to push the commit already upstream. |
| 96 | + |
| 97 | + See :pull:`532`. |
| 98 | +* Made checkout behaviour more robust if ``checkoutSCM`` *and* a |
| 99 | + ``checkoutScript``/``checkoutAssert`` is used. Specifically, if the workspace |
| 100 | + was changed since the last time, Bob now re-runs the checkout with the |
| 101 | + ``checkoutScript``/``checkoutAssert``. |
| 102 | + |
| 103 | + This fixes a problem on Jenkins builds when the checkoutScript modifies a git |
| 104 | + repository. This change will be squashed by the Jenkins git plugin every time |
| 105 | + the job runs. Now, if the script was marked deterministic, Bob still has to |
| 106 | + run it again to re-apply any modifications. |
| 107 | + |
| 108 | + Another example are code generators that should probably be run again if the |
| 109 | + workspace has changed. In fact, if the script was enabled for checkout-only |
| 110 | + updates (:ref:`configuration-recipes-checkoutUpdateIf`), then such |
| 111 | + modifications would already trigger the re-run if the workspace was modified. |
| 112 | +* No empty build/dist workspaces are created any more in case of |
| 113 | + ``--checkout-only`` builds. |
| 114 | +* The parallel build scheduling and audit step visibility has been improved. |
| 115 | + |
| 116 | + If a checkout/build/package-script finishes, the whole step is not yet |
| 117 | + complete until the audit record has been created. Unfortunately, older |
| 118 | + versions ob Bob did schedule other steps before doing the final audit part. |
| 119 | + This had the unpleasant effect that, even though the script has finished, |
| 120 | + interrupting Bob at this stage leads to a full re-execution of the whole step |
| 121 | + later on. This has been rectified. See :issue:`539` for more details. |
| 122 | +* The URL SCM, if given a bare file name or ``file://`` url, now copies files |
| 123 | + atomically. Previously a partially copied file could have remained in the |
| 124 | + workspace if Bob was interrupted. The copy will now also retain the file |
| 125 | + modification time. |
| 126 | +* Some caching data structures in the binary artifact repository that defer |
| 127 | + checkouts until really necessary are now always updated. These caching data |
| 128 | + structures are prone to incorrect data e.g., if some checkout is not really |
| 129 | + deterministic (e.g. git influenced by global git config). The old behaviour |
| 130 | + was to never replace the files which sets the very first execution result |
| 131 | + into stone. If that was incorrect, there are no tools to purge the wrong |
| 132 | + cache except deleting the whole binary archive. |
| 133 | + |
| 134 | + Now this checkout information is always updated. These files are small so |
| 135 | + there should be no performance impact. |
| 136 | +* The sandbox environment now provides a working pseudo tty environment. This |
| 137 | + is important when using tools like ``script``, ``screen`` or ``ssh`` inside |
| 138 | + a sandbox. (:issue:`554`) |
| 139 | + |
| 140 | +Backwards incompatible changes |
| 141 | +------------------------------ |
| 142 | + |
| 143 | +* The default Jenkins build mode has been changed to "clean build". This should |
| 144 | + improve robustness at the expense of speed. If desired, incremental builds |
| 145 | + can be enabled explicitly. See the Jenkins :ref:`manpage-bob-jenkins-options` |
| 146 | + ``--clean`` and ``--incremental``. |
| 147 | + |
| 148 | +Bug fixes |
| 149 | +--------- |
| 150 | + |
| 151 | +* Fixed crash when invoking generators with the filter option (:pull:`525`) |
| 152 | +* Fixed crash on PowerShell fingerprint script (:issue:`527`) |
| 153 | +* Fixed PowerShell fingerprint script support. When the default language is |
| 154 | + set to PowerShell, any script without the language suffix should apply to |
| 155 | + PowerShell. Specifically, the ``fingerprintScript`` should be executed as |
| 156 | + PowerShell script if ``fingerprintScriptPwsh`` is not set. This was not |
| 157 | + working, though. |
| 158 | +* Fixed the ``bob-libc-version`` built-in fingerprint helper for current |
| 159 | + MSYS2 versions (:pull:`526`) |
| 160 | +* Made Bob more robust against package cache corruptions. A corrupt cache |
| 161 | + will be rebuilt instead of crashing. (:issue:`529`) |
| 162 | +* Fixed git SCM switch when going back to older revision. If gitCommitOnBranch |
| 163 | + is active and commit and branch are configured in the recipe changing the |
| 164 | + commit back to a older one did not update the sources back to the configured |
| 165 | + version. Instead they remained on the current version. (:pull:`531`) |
| 166 | +* Fixed inline git SCM switch if the ``references`` or ``dissociate`` property |
| 167 | + changes. (:pull:`537`) |
| 168 | +* Fixed crash in URL SCM if no extractor is installed e.g., if ``unzip`` is |
| 169 | + missing. (:pull:`538`) |
| 170 | +* Fixed ``$PATH`` handling in sandbox environments. When using a sandbox, the |
| 171 | + interpreter (bash or pwsh) must be found using the defined sandbox paths. |
| 172 | + Older versions of Bob relied on the host ``$PATH`` which is not correct and |
| 173 | + might not necessarily cover the installation path of bash/pwsh in the |
| 174 | + sandbox. |
| 175 | +* Removed hard coded path of ``rm`` in Bob generated wrapper scripts. |
| 176 | +* SCM switches are now more robust when moving between Bob versions. It |
| 177 | + could happen that SCMs are moved to the attic just because the initial |
| 178 | + checkout was done by an older version of Bob. This should not happen any more. |
| 179 | +* Some SCM attributes (e.g. ``retries``, ``recurseSubmodules``) previously |
| 180 | + would trigger moves to the attic. This has been rectified. |
0 commit comments