Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

integrate coredev.buildout (was PR #1670) #1671

Merged
merged 79 commits into from
Jul 20, 2024
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
3c547df
Clean up PR #1670
stevepiercy Jun 19, 2024
83b708f
Revert whitespace changes and use naked URLs (< and > are not require…
stevepiercy Jun 19, 2024
6449526
Minor grammar fixes, restore whitespace, one line per sentence, empha…
stevepiercy Jun 19, 2024
7d90a29
Revise documentation.md with current resources
stevepiercy Jun 19, 2024
e2fb4f8
- Set the stage for the purpose of this contributing how to guide. It…
stevepiercy Jun 20, 2024
e719f68
Pull in RTD PR review config
stevepiercy Jun 20, 2024
1387142
Use correct primary branch
stevepiercy Jun 20, 2024
717ea4a
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jun 20, 2024
5124144
bin/wsgi no workie
stevepiercy Jun 21, 2024
ef84d05
Update commit message
stevepiercy Jun 21, 2024
b3f2347
Update mrdeveloper.md
stevepiercy Jun 21, 2024
6f92024
Update package-dependencies.md, reverting whitespace changes
stevepiercy Jun 21, 2024
57cd6fd
Revert whitespace changes, restore TODO
stevepiercy Jun 21, 2024
e626b65
Revert whitespace muckery
stevepiercy Jun 21, 2024
9a98df4
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jun 21, 2024
a79fe1f
Revise and make recommendations in plips.md to remove coaching and fo…
stevepiercy Jun 22, 2024
ea65b7c
Move FAQ to the end to elevate the process overview.
stevepiercy Jun 22, 2024
d1b54fc
Fix linkcheck redirect
stevepiercy Jun 22, 2024
aa5a028
Revise how to submit a PLIP for today
stevepiercy Jun 23, 2024
21453a6
Fix redirect
stevepiercy Jun 23, 2024
ef40380
Update pre-requisites of libx* and C compiler
stevepiercy Jun 24, 2024
cbb149e
Add admonition for non-3.11 Pythons
stevepiercy Jun 24, 2024
962a4b9
Revise and make recommendations in plips.md to remove coaching and fo…
stevepiercy Jun 24, 2024
edee66e
Back off from attempt to use buildout for Volto, and refer to officia…
stevepiercy Jun 24, 2024
7e45ba7
Use correct git terms, instead of gitterish
stevepiercy Jun 24, 2024
0897e15
Give better instructions not to switch between Plone or coredev.build…
stevepiercy Jun 24, 2024
1704bbc
Move new development branch under Edit packages, and use what @thet a…
stevepiercy Jun 24, 2024
7e604ed
Add -N flag option to buildout
stevepiercy Jun 24, 2024
fcdd992
Reference tests to use PR, CI, and Jenkins first, and locally only if…
stevepiercy Jun 24, 2024
7838b17
Add note for how to identify towncrier repos
stevepiercy Jun 24, 2024
abf5f7b
Remove obsolete section "Update `checkouts.cfg`"
stevepiercy Jun 24, 2024
bc12737
Copy from first-time-contributors about Fixes #ISSUE-NUMBER
stevepiercy Jun 24, 2024
6ef5c58
Purge obsolete explanation about what Jenkins runs
stevepiercy Jun 24, 2024
21e3658
Update C compiler pre-requisites
stevepiercy Jun 26, 2024
a80c9cc
Reword seealso for `mr.developer`
stevepiercy Jun 26, 2024
26da8cc
Rewrite adn simplify git pieces
stevepiercy Jun 26, 2024
6f816ae
Indicate symbol
stevepiercy Jun 26, 2024
4a269ca
Fix headings and meta information
stevepiercy Jun 26, 2024
c8edc3c
Remove todo
stevepiercy Jun 26, 2024
86c1fca
- Align overview with sections of PLIP submittal process
stevepiercy Jun 26, 2024
33156c3
- Purge FAQ as redundant and unused. No one asks questions about PLIP…
stevepiercy Jun 26, 2024
3315905
Volto has its own contributing process, regardless of whether it is a…
stevepiercy Jun 26, 2024
f087267
Add intersphinx configuration for Plone 5 docs
stevepiercy Jun 27, 2024
2098aa7
Finalize PLIP stuff
stevepiercy Jun 27, 2024
340a0ae
Clean up release.md and add Community Forum posts
stevepiercy Jun 27, 2024
693d026
Update troubleshooting.md
stevepiercy Jun 27, 2024
2f86304
Reorder navigation
stevepiercy Jun 27, 2024
438b8ef
Rename troubleshooting.md to troubleshoot.md
stevepiercy Jun 27, 2024
cd238fe
Replace @vincentfretin with @erral
stevepiercy Jun 27, 2024
b5426e8
Add link to active PLIPs GitHub project board.
stevepiercy Jun 27, 2024
9df10b5
Update docs/contributing/core/index.md
stevepiercy Jun 28, 2024
be8c6ad
Fix doc link, grammar.
stevepiercy Jun 28, 2024
62072af
Use chromedriver and ROBOT_BROWSER environment variable
stevepiercy Jun 28, 2024
a26ee56
We don't use `bootstrap.py`. Burn it with 🔥!
stevepiercy Jun 28, 2024
0d213ac
s/egg/package
stevepiercy Jun 28, 2024
7b19bcb
Add maintainers
stevepiercy Jun 28, 2024
4c7badf
Add GitHub handles to humans
stevepiercy Jun 28, 2024
75f782c
Restore @plone/framework-team GitHub handle
stevepiercy Jun 28, 2024
004370b
s/FWT/designated team
stevepiercy Jun 28, 2024
4c16ff2
Update tips submodules/plone.api submodules/volto
stevepiercy Jun 28, 2024
d78a2d3
Add a todo for the Steering Circle
stevepiercy Jun 28, 2024
7e741c8
Add the PLIP to the PLIP project board
stevepiercy Jun 28, 2024
ad7dce1
Remove TODO for Steering Circle, as it is not a relevant body to revi…
stevepiercy Jun 29, 2024
add1c99
Add a todo for the Steering Circle
stevepiercy Jun 28, 2024
ca03c87
Add the PLIP to the PLIP project board
stevepiercy Jun 28, 2024
e5dae08
Remove TODO for Steering Circle, as it is not a relevant body to revi…
stevepiercy Jun 29, 2024
291bb0a
Merge remote-tracking branch 'origin/integratel-coredev.buildout-2' i…
stevepiercy Jun 29, 2024
113d9b3
Revert "Update tips submodules/plone.api submodules/volto"
stevepiercy Jun 29, 2024
c4f30b3
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jun 29, 2024
667124b
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jun 29, 2024
cdc9174
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jul 1, 2024
50f8fe1
Use `-s` for a package
stevepiercy Jul 7, 2024
53e678b
Fix typo
stevepiercy Jul 7, 2024
fea2941
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jul 8, 2024
21df2a7
Merge branch '6.0' into integratel-coredev.buildout-2
tisto Jul 11, 2024
187b9c4
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jul 18, 2024
12b06a0
Merge branch '6.0' into integratel-coredev.buildout-2
stevepiercy Jul 20, 2024
b4f87fa
Comment out continuous-integration and silence Sphinx warning
stevepiercy Jul 20, 2024
73524a4
Purge coredev directory of now obsolete files
stevepiercy Jul 20, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ build:
# If there are no changes (git diff exits with 0) we force the command to return with 183.
# This is a special exit code on Read the Docs that will cancel the build immediately.
- |
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/main -- docs/ .readthedocs.yaml requirements-initial.txt requirements.txt;
if [ "$READTHEDOCS_VERSION_TYPE" = "external" ] && git diff --quiet origin/6.0 -- docs/ .readthedocs.yaml requirements-initial.txt requirements.txt;
then
exit 183;
fi
Expand Down
4 changes: 4 additions & 0 deletions coredev/agreement.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Contributing, Plone"
---

```{todo}
All this can go, it's redundant
```

(contributing-to-plone-label)=

# Contributing to Plone
Expand Down
4 changes: 4 additions & 0 deletions coredev/continous-integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Plone, continuous integration, best practices"
---

```{todo}
needs redaction and upgrade
```

# Essential continuous integration practices

The CI system at [jenkins.plone.org](https://jenkins.plone.org) is a shared resource for Plone core developers to notify them of regressions in Plone core code.
Expand Down
3 changes: 1 addition & 2 deletions coredev/contributors_agreement_explained.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ myst:
---

```{todo}
All this content should be audited against the plone.org site, probably removed, and replaced with a link to the authorative content on plone.org.
Duplicating content is a maintenance burden.
All this can go, it's redundant
```

# Contributor's Agreement for Plone explained
Expand Down
2 changes: 1 addition & 1 deletion coredev/culture.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ myst:
---

```{todo}
This content is probably redundant and should be purged.
All this can go, it's redundant
```

# Plone developer culture
Expand Down
3 changes: 3 additions & 0 deletions coredev/documentation.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ myst:
"property=og:title": "Writing documentation of Plone"
"keywords": "documentation, Plone"
---
```{todo}
shorten & update
```

# Writing documentation

Expand Down
4 changes: 4 additions & 0 deletions coredev/getting-started-with-development.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Plone, development"
---

```{todo}
Needs updating to Plone6, but contains useful info
```

# Getting started with development

This document assumes you want to run the current latest Plone source, fix a bug in Plone, or test an add-on in the context of the latest code, and will detail the full process.
Expand Down
4 changes: 1 addition & 3 deletions coredev/git.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@ myst:
---

```{todo}
I seriously question the value of this entire guide.
I think it should be purged.
Plone should not be in the business of teaching how to use git or GitHub.
All this can go, it's redundant
```

# Working with Git and GitHub
Expand Down
6 changes: 3 additions & 3 deletions coredev/guidelines.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ myst:
"keywords": ""
---

```todo
This should probably be purged.
It is redundant to the default [CONTRUBITING.md](https://github.com/plone/.github/blob/main/CONTRIBUTING.md) and other files.
```{todo}
All this can go, it's redundant.
IMPORTANT: it does need a rewrite on 6.docs.plone.org as there are many packages in the wild that link to it.
```

% Note: this page is linked to from CONTRIBUTING.rst in all packages. Keep it short!
Expand Down
4 changes: 4 additions & 0 deletions coredev/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Developing, Plone, Contributing"
---

```{todo}
Most of this can go
```

# Development in Plone

This part describes the process of development in Plone.
Expand Down
4 changes: 4 additions & 0 deletions coredev/mrdeveloper.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "mr.developer"
---

```{todo}
Review, but keep
```

# `mr.developer`

This buildout uses `mr.developer` to manage package development.
Expand Down
4 changes: 4 additions & 0 deletions coredev/packages-dependencies.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Architecture, packages, dependecies, Plone"
---

```{todo}
Needs grammar/style check, and re-do the ASCII art as Mermaid diagram for added clarity and visuals
```

# Architecture: packages and dependecies

This chapter describes the architecture of Plone's packages and dependencies.
Expand Down
4 changes: 4 additions & 0 deletions coredev/plip-review.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "PLIP, review, Plone Improvement Proposal, Plone"
---

```{todo}
Combine with PLIP page, remove obsolete technologies, go over language
```

# PLIP review

A Plone Improvement Proposal (PLIP) is a formal process to propose a change to improve Plone.
Expand Down
4 changes: 4 additions & 0 deletions coredev/plips.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Plone Improvement Proposal, PLIP)"
---

```{todo}
Needs language review
```

# Plone Improvement Proposals (PLIPs)

A PLIP is a Plone Improvement Proposal.
Expand Down
4 changes: 4 additions & 0 deletions coredev/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Plone, release, process"
---

```{todo}
Can stay, as it needs a place to live. Check in with Release Managers to update content, if needed
```

# Plone release process

This chapter describes the process to release Plone and its packages.
Expand Down
6 changes: 5 additions & 1 deletion coredev/roboto.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Mr. Roboto, mr.roboto, Plone"
---

```{todo}
Needs content review, it looks highly outdated with references to CVS, kgs and other obsolete tech
```

# Mr. Roboto

```{todo}
Expand All @@ -26,7 +30,7 @@ When a push happens on GitHub, `mr.roboto` is triggered and it starts to analyze

```{todo}
`http://jenkins.plone.org/roboto/plips` is obsolete, and returns a 404 not found.
```
```


## Job finishes
Expand Down
4 changes: 4 additions & 0 deletions coredev/troubleshooting.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ myst:
"keywords": "Troubleshooting, development issues, Plone"
---

```{todo}
Needs review. In general, a 'troubleshooting' page is nice, but this looks outdated
```

# Troubleshooting

This chapter describes how to troubleshoot development issues in Plone.
Expand Down
7 changes: 7 additions & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@
"sphinx.ext.viewcode", # plone.api
"sphinx.ext.autosummary", # plone.api
"sphinx.ext.graphviz",
"sphinxcontrib.mermaid",
"notfound.extension",
]

Expand Down Expand Up @@ -99,6 +100,8 @@
r"https://stackoverflow.com", # volto and documentation # TODO retest with latest Sphinx.
r"https://web.archive.org/", # volto
r"https://www.youtube.com/playlist", # volto, TODO remove after installing sphinxcontrib.youtube
r"https://www.upc.edu/en", # TODO remove after their certificate is fixed
r"http://z3c.pt", # fluke where Sphinx interprets this as a URL
]
linkcheck_anchors = True
linkcheck_timeout = 5
Expand Down Expand Up @@ -179,6 +182,8 @@
"fawrench": '<span class="fa fa-wrench" style="font-size: 1.6em;"></span>',
}

mermaid_version = "10.9.1"

# -- Intersphinx configuration ----------------------------------

# This extension can generate automatic links to the documentation of objects
Expand All @@ -197,6 +202,7 @@
# the entire Plone Documentation is built.
intersphinx_mapping = {
"plone": ("https://6.docs.plone.org/", None), # for imported packages
"plone5": ("https://5.docs.plone.org/", None),
"python": ("https://docs.python.org/3/", None),
"training": ("https://training.plone.org/", None),
"training-2022": ("https://2022.training.plone.org/", None),
Expand Down Expand Up @@ -329,6 +335,7 @@
"edit_page_url_template": "https://6.docs.plone.org/contributing/index.html?{{ file_name }}#making-contributions-on-github",
}


# An extension that allows replacements for code blocks that
# are not supported in `rst_epilog` or other substitutions.
# https://stackoverflow.com/a/56328457/2214933
Expand Down
111 changes: 111 additions & 0 deletions docs/contributing/core/continuous-integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
---
myst:
html_meta:
"description": "Essential continuous integration practices"
"property=og:description": "Essential continuous integration practices"
"property=og:title": "Essential continuous integration practices"
"keywords": "Plone, continuous integration, best practices"
---

# Essential continuous integration practices
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This whole page is outdated, it does not mention mr.roboto, GHA nor plone/meta which make almost all the rules described outdated.

Sorry that it took me forever to react on the call to help on this PR 🙇🏾

I can do the update, should I push it directly to this branch? 🤔

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gforcada please create a PR against this branch for review. Do not push commits directly to this branch.

I'm not clear on which repositories plone/meta applies. From what I know, many repositories use make and not tox, including Volto, plone.restapi, and Documentation. Until there is both agreement and implementation for a unified approach, I don't know whether plone/meta should be declared as authoritative for all projects under the Plone GitHub organization.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thanks I will do that (the branch).

As for plone/meta or make, well, it's literally all but volto related packages that already use plone/meta. There are a few that are missing (like CMFPlone) that I did not had the time to apply plone/meta to it.

But this documentation is meant for classic UI, or? 🤔 I meant I saw quite a few references that always branch to say "if you are doing volto then see ../volto"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This part of the documentation is intended for anything that is not Volto, which includes Classic UI, core add-ons, and other core packages.

There is also an effort with cookiecutter and mxdev, which is intended to replace buildout, at which point another rewrite of docs will need to take place.

I don't know how that reconciles with plone/meta. I just document what I understand.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

plone/meta and mxdev/cookiecutter are orthogonal, at least I'm 100% sure with mxdev, with cookiecutter that depends on what's being done, of for which purpose is used 😓

I've seen so many cookieXX repositories, that I'm no longer sure what one should use 🤷🏾

but if the goal is to replace zc.buildout, then plone/meta has nothing to do with that and should be fine to document.

Actually plone/meta has quite some exhaustive documentation on its own 😄

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gforcada even before your review and subsequent pull request, I had a lot of issues with this document. It never had a high-level review. I apologize for not bringing up my concerns earlier, but here they are now.

  1. It's not clear what is the purpose of this document.
  2. It's not clear who is the target audience.
  3. Is it a tutorial, a how-to guide, an explanation, or a reference? See https://diataxis.fr/ for details of what these categories mean.
  4. Much of the content is redundant to existing parts of the documentation, as well as within this pull request, including:

Once we have an idea of what we want to do, then we can rewrite this document to achieve that goal. I'd be happy to have a chat with you in real-time in Discord, or continue the conversation here.


For cookie*, the primary repo is https://github.com/plone/cookieplone. It uses templates found in https://github.com/plone/cookieplone-templates. I don't know whether that repo uses plone/meta itself, but its templates do.

cookie* uses mxdev, as described in https://6.docs.plone.org/install/manage-add-ons-packages.html#manage-plone-backend-packages-with-mxdev.


Are these files plone/meta's documentation?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In reverse order 🙃

  • yes, that's the documentation for plone/meta

  • oh nice, thanks for the cookie pointers, now it's a bit more clear to me, the (not to be answered and solved now) is how that works with mr.bob and bobtemplates.plone and all that ecosystem, or again, we have cookie* for volto and mr.bob for classic UI? 🤔

  • for this document, I would say that it's an explanation of how the CI system works, being the target audience newcomers.

With the links you provided (thanks!) I would say it could be linked from https://6.docs.plone.org/contributing/index.html#continuous-integration, then, we could simplify my PR to remove the explanation about PRs and be more focused only on the tooling involved.

How that sounds?

As for talking in discord, sure, this week, I do have time in European evenings, something like https://www.timeanddate.com/worldclock/converter.html?iso=20240708T170000&p1=37&p2=202 ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • OK on meta docs.

  • I encourage you to try cookieplone for fun. If there is something missing, or is not clear how to do, then file an issue.

  • I think an explanation page would be good. I do not know all the parts of CI, what each part does, or how they al work together to fulfill specified tasks.

    In that context, let's change the document title to "Continuous integration". If we keep "essential" or "practices", then we start telling the reader how to do things or what things they should do, which makes it a how-to guide, not an explanation.

    Also if you use Mermaid for diagrams, you could even draw a picture of the workflow.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@gforcada to get this PR merged, I will remove the CI stuff entirely. It's not correct and should not be published in its current state. The rest of it is good. We can add the CI stuff in another PR.

I'll work on pulling it out of this PR, and moving it back to the coredev directory to preserve the grammar and MyST work I did. I'll do that sometime this week.


The {term}`CI` system at [jenkins.plone.org](https://jenkins.plone.org) is a shared resource for Plone core developers to notify them of regressions in Plone core code.

Build breakages are a normal and expected part of the development process.
The aim is to find errors and remove them as quickly as possible, without expecting perfection and zero errors.
However, there are some essential practices that you need follow to achieve a stable build:


## 1) Don't check in on a broken build

Do not make things more complicated for the developer who is responsible for breaking the build.

If the build breaks, the developer has to identify the cause of the breakage as soon as possible and should fix it.
This strategy gives the developer the best option to find out what caused the breakage and fix it immediately.
Fixing the build is easier with a clear look at the problem.
Checking in further changes and triggering new builds will complicate matters and lead to more problems.

If the build is broken over a longer period of time (more than a couple of hours) you should either:

- notify the developer who is responsible for the breakage
- fix the problem yourself
- revert the commit so you and others can continue to work

```{note}
There is one exception to this rule.
Sometimes there are changes or tests that depend on changes in other packages.
If this is the case, there is no way around breaking a single build for a certain period of time.
In this case, run the all tests locally with all the changes and commit them within a time frame of ten minutes.
```


## 2) Always run all commit tests locally before committing

Follow this practice so the build stays green, and other developers can continue to work without breaking the first rule.

Remember that Plone development can happen all over the world, at all times.
Other developers may have checked in changes since your last synchronization.
These may interact with your work.

Therefore it's essential that you merge changes from the main branch into your feature branch, then run the tests again, before you push your changes to GitHub.

A common source of errors on check-in is to forget to add some files to the repository.
Use {command}`git status` to check and correct for this.
Also double-check to not check in files that should not be part of a package, such as editor configuration files and git submodules.


## 3) Wait for commit tests to pass before moving on

Always monitor the build's progress, and fix the problem right away if it fails.
If you introduced a regression, you have a far better chance of fixing the build sooner than later.
Also another developer might have committed in the meantime (by breaking rule 1), making things more complicated for you.


## 4) Never go home on a broken build

Take into account the first rule of CI ("Don't check in on a broken build").
Breaking the build essentially stops all other developers from working on it.
Therefore going home on a broken build—or even on a build that has not finished yet—is _not_ acceptable.
It will prevent all other developers from working, or they will need to fix the errors that you introduced.


## 5) Always be prepared to revert to the previous revision

For other developers to work on the build, you should always be prepared to revert to the previous passing revision.


## 6) Time-box fixing before reverting

When the build breaks on check-in, try to fix it for ten minutes.
If, after ten minutes, you aren't finished with the solution, revert to the previous version from your version control system.
This way you will allow other developers to continue to work.


## 7) Don't comment out failing tests

Once you begin to enforce the previous rule, the result is often that developers start commenting out failing tests in order to get the build passing again as quickly as possible.
While this impulse is understandable, it is _not acceptable_.

The tests were passing for a while and then start to fail.
This means that you either caused a regression, made assumptions that are no longer valid, or the application has changed the functionality being tested for a valid reason.

You should always either fix the code (if a regression has been found), modify the test (if one of the assumptions has changed), or delete it (if the functionality under test no longer exists).


## 8) Take responsibility for all breakages that result from your changes

If you commit a change and all the tests you wrote pass, but others break, the build is still broken.
This also applies to tests that fail in `buildout.coredev` and don't belong directly to the package you worked on.
This means that you have introduced a regression bug into the application.

It is _your responsibility_ to fix all tests that do not pass because of your changes.

There are some tests in Plone that fail randomly, and the community is always working on fixing those.
If you think you hit such a test, try to fix it or re-run the Jenkins job to see if it passes again.

In any case, the developer who made the commit is responsible to make it pass.


## Further reading

These rules were taken from the excellent book "Continuous Delivery" by Jez Humble and David Farley (Addison Wesley), and have been adopted and rewritten for the Plone community.
Loading