From 385eea9aa929611a10e6988119f9dfb5d0c49c32 Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 03:01:01 +0000 Subject: [PATCH 01/11] PPF-615: good start --- docs/dev_intro.md | 12 ++++++++++++ docs/index.md | 4 ++++ mkdocs.yml | 2 ++ 3 files changed, 18 insertions(+) create mode 100644 docs/dev_intro.md diff --git a/docs/dev_intro.md b/docs/dev_intro.md new file mode 100644 index 00000000..2221300d --- /dev/null +++ b/docs/dev_intro.md @@ -0,0 +1,12 @@ +# Developer Intro + +PyPDFForm's targeted users are other Python developers. This section of the documentation is not for the users, +but for people who want to start making contributions to PyPDFForm itself. + +## Installing Requirements + +It is advised that a virtual environment is created before running this command: + +```shell +pip install -r requirements.txt +``` diff --git a/docs/index.md b/docs/index.md index 9ca8adbc..09afd324 100644 --- a/docs/index.md +++ b/docs/index.md @@ -21,3 +21,7 @@ It also supports other common utilities such as extracting pages and merging mul * [Change checkbox and radio button styles](button_style.md) * [Draw stuffs](draw.md) * [Other utilities](utils.md) + +## Developer Guide + +* [Developer Intro](dev_intro.md) diff --git a/mkdocs.yml b/mkdocs.yml index 8db3a4f9..f59535fd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -12,6 +12,8 @@ nav: - button_style.md - draw.md - utils.md + - 'Developer Guide': + - dev_intro.md theme: name: readthedocs logo: img/logo.png From 8ea8ef3d4de266e4b0e6850e67577ad178f1d4c8 Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 03:32:18 +0000 Subject: [PATCH 02/11] PPF-615: finished dev intro --- docs/dev_intro.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/docs/dev_intro.md b/docs/dev_intro.md index 2221300d..e2aa1e4a 100644 --- a/docs/dev_intro.md +++ b/docs/dev_intro.md @@ -3,10 +3,44 @@ PyPDFForm's targeted users are other Python developers. This section of the documentation is not for the users, but for people who want to start making contributions to PyPDFForm itself. -## Installing Requirements +## Installing requirements It is advised that a virtual environment is created before running this command: ```shell pip install -r requirements.txt ``` + +## Running tests + +PyPDFForm uses [pytest](https://pytest.org/) to run all its tests. Tests can be run by simply executing: + +```shell +pytest +``` + +To generate a coverage report, run: + +```shell +coverage run -m pytest && coverage html +``` + +And the coverage report can be viewed by openning `htmlcov/index.html` in a browser. + +## Creating issues + +When you create an issue on GitHub, try your best to follow these conventions: + +* The issue title should have the format `PPF-: `. +* The issue description should be as descriptive as possible, preferably with the following: + * A code snippet related to the issue. + * A PDF form template used by the code snippet. + * Screenshots that can help visualize the issue. + +## Openning pull requests + +Please create an issue before making a pull request. Try your best to follow these conventions when do so: + +* The PR title should be the same as its respective issue, so `PPF-<issue number>: <title of the issue>`. +* The PR description should contain a brief explanation on the changes. +* Once opened, the PR should be linked to its respective issue. From a7f244947aafaf106afabdb829469bbcc7eecd6a Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 03:42:32 +0000 Subject: [PATCH 03/11] PPF-615: setup structures --- docs/dev_changes.md | 1 + docs/dev_doc.md | 1 + docs/dev_release.md | 1 + docs/dev_test.md | 1 + docs/index.md | 4 ++++ mkdocs.yml | 4 ++++ 6 files changed, 12 insertions(+) create mode 100644 docs/dev_changes.md create mode 100644 docs/dev_doc.md create mode 100644 docs/dev_release.md create mode 100644 docs/dev_test.md diff --git a/docs/dev_changes.md b/docs/dev_changes.md new file mode 100644 index 00000000..ec1955b1 --- /dev/null +++ b/docs/dev_changes.md @@ -0,0 +1 @@ +# Change Requirements diff --git a/docs/dev_doc.md b/docs/dev_doc.md new file mode 100644 index 00000000..bb0507bc --- /dev/null +++ b/docs/dev_doc.md @@ -0,0 +1 @@ +# Changing Documentations diff --git a/docs/dev_release.md b/docs/dev_release.md new file mode 100644 index 00000000..af81e9ed --- /dev/null +++ b/docs/dev_release.md @@ -0,0 +1 @@ +# Releasing diff --git a/docs/dev_test.md b/docs/dev_test.md new file mode 100644 index 00000000..f00b526a --- /dev/null +++ b/docs/dev_test.md @@ -0,0 +1 @@ +# Testing diff --git a/docs/index.md b/docs/index.md index 09afd324..73568e9f 100644 --- a/docs/index.md +++ b/docs/index.md @@ -25,3 +25,7 @@ It also supports other common utilities such as extracting pages and merging mul ## Developer Guide * [Developer Intro](dev_intro.md) +* [Change Requirements](dev_changes.md) +* [Changing Documentations](dev_doc.md) +* [Testing](dev_test.md) +* [Releasing](dev_release.md) diff --git a/mkdocs.yml b/mkdocs.yml index f59535fd..7f12d15a 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -14,6 +14,10 @@ nav: - utils.md - 'Developer Guide': - dev_intro.md + - dev_changes.md + - dev_doc.md + - dev_test.md + - dev_release.md theme: name: readthedocs logo: img/logo.png From 88bcb88847bee3e09190cd0f56473fea76821055 Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 03:50:30 +0000 Subject: [PATCH 04/11] PPF-615: move to test docs --- docs/dev_intro.md | 14 +------------- docs/dev_test.md | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 13 deletions(-) diff --git a/docs/dev_intro.md b/docs/dev_intro.md index e2aa1e4a..f42102a0 100644 --- a/docs/dev_intro.md +++ b/docs/dev_intro.md @@ -13,19 +13,7 @@ pip install -r requirements.txt ## Running tests -PyPDFForm uses [pytest](https://pytest.org/) to run all its tests. Tests can be run by simply executing: - -```shell -pytest -``` - -To generate a coverage report, run: - -```shell -coverage run -m pytest && coverage html -``` - -And the coverage report can be viewed by openning `htmlcov/index.html` in a browser. +See [testing PyPDFForm with pytest](dev_test.md) ## Creating issues diff --git a/docs/dev_test.md b/docs/dev_test.md index f00b526a..3e34ea4c 100644 --- a/docs/dev_test.md +++ b/docs/dev_test.md @@ -1 +1,18 @@ # Testing + +PyPDFForm uses [pytest](https://pytest.org/) for testing and [coverage.py](https://coverage.readthedocs.io/) +for test coverages. Tests can be run by simply executing: + +```shell +coverage run -m pytest && coverage report --fail-under=100 +``` + +## Generate coverage report + +To generate a coverage report, run: + +```shell +coverage run -m pytest && coverage html +``` + +And the coverage report can be viewed by openning `htmlcov/index.html` in a browser. From af5b183f4969ca70f0edfaf8c816aadc4d16435c Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 04:16:30 +0000 Subject: [PATCH 05/11] PPF-615: test doc draft --- docs/dev_intro.md | 2 +- docs/dev_test.md | 78 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+), 1 deletion(-) diff --git a/docs/dev_intro.md b/docs/dev_intro.md index f42102a0..50d69a4c 100644 --- a/docs/dev_intro.md +++ b/docs/dev_intro.md @@ -13,7 +13,7 @@ pip install -r requirements.txt ## Running tests -See [testing PyPDFForm with pytest](dev_test.md) +See [testing PyPDFForm with pytest](dev_test.md). ## Creating issues diff --git a/docs/dev_test.md b/docs/dev_test.md index 3e34ea4c..24ff2e66 100644 --- a/docs/dev_test.md +++ b/docs/dev_test.md @@ -16,3 +16,81 @@ coverage run -m pytest && coverage html ``` And the coverage report can be viewed by openning `htmlcov/index.html` in a browser. + +## Test breakdown + +Each PyPDFForm test is different case by case. However, there is a general paradigm that almost all tests follow. + +In most cases, a test executes a sequence of instructions related to PyPDFForm, whether being filling a PDF form or +drawing a text. After the sequence is done, the test should compare the resulted PDF stream with an "expected" PDF stream. +The expected PDF is a file found under the `pdf_samples` directory. + +Consider this example test: + +```python +def test_fill(pdf_samples, request): + expected_path = os.path.join(pdf_samples, "sample_filled.pdf") + with open(expected_path, "rb+") as f: + obj = PdfWrapper( + os.path.join(pdf_samples, "sample_template.pdf") + ).fill( + { + "test": "test_1", + "check": True, + "test_2": "test_2", + "check_2": False, + "test_3": "test_3", + "check_3": True, + }, + ) + + request.config.results["expected_path"] = expected_path + request.config.results["stream"] = obj.read() + + expected = f.read() + + assert len(obj.read()) == len(expected) + assert obj.read() == expected +``` + +The test starts by setting an expected PDF `sample_filled.pdf`: + +```python +expected_path = os.path.join(pdf_samples, "sample_filled.pdf") +``` + +The test then fills `sample_template.pdf` with a data dictionary using `PdfWrapper`: + +```python +obj = PdfWrapper( + os.path.join(pdf_samples, "sample_template.pdf") +).fill( + { + "test": "test_1", + "check": True, + "test_2": "test_2", + "check_2": False, + "test_3": "test_3", + "check_3": True, + }, +) +``` + +These two lines should almost always be added in every test to make updating old tests easier: + +```python +request.config.results["expected_path"] = expected_path +request.config.results["stream"] = obj.read() +``` + +Finally, the test compares the resulted stream from the test with the expected file stream: + +```python +expected = f.read() + +assert len(obj.read()) == len(expected) +assert obj.read() == expected +``` + +This concludes the test, which is equivalent to saying after filling `sample_template.pdf` using the +data dictionary, it should look like `sample_filled.pdf`. From 65076ad52da1984ebb5760661f03bf136cd04447 Mon Sep 17 00:00:00 2001 From: Jinge Li <9894243+chinapandaman@users.noreply.github.com> Date: Mon, 17 Jun 2024 21:08:30 +0000 Subject: [PATCH 06/11] PPF-615: finish up the rest --- docs/dev_changes.md | 26 +++++++++++++++++++++++++- docs/dev_doc.md | 19 ++++++++++++++++++- docs/dev_release.md | 22 ++++++++++++++++++++++ docs/index.md | 4 ++-- 4 files changed, 67 insertions(+), 4 deletions(-) diff --git a/docs/dev_changes.md b/docs/dev_changes.md index ec1955b1..7b9278ac 100644 --- a/docs/dev_changes.md +++ b/docs/dev_changes.md @@ -1 +1,25 @@ -# Change Requirements +# Pull Request Requirements + +Whenever a pull request is submitted, there are some expectations on the content before it can be merged +into the master branch. + +## Code changes + +There isn't any strict rule on how coding should be done for PyPDFForm. The project welcomes code contributions from +anyone and any level of expertise. + +With that said, there are some conventions that are expected to be followed by your PR: + +* Your changes must pass [Pylint](https://www.pylint.org/). To check if this is true simply run `pylint PyPDFForm`. +* Your changes must pass all tests and have 100% coverage. You can read more about testing [here](dev_test.md). +* If you are changing the user APIs or any other parts of the code that are relevant, please update the appropriate documentations too. + +## Merge process + +Your PR will be reviewed before merging into the master branch. On top of that it needs to run through some CI checks: + +* Pylint on the source code. +* Tests will be run on three main stream operating systems: `ubuntu`, `windows`, and `macos`, and across all Python versions the library supports on each OS. + +Once the CI is green and your code looks good, the PR will be merged into the master branch. After every PR merge, [black](https://black.readthedocs.io/) and +[isort](https://pycqa.github.io/isort/) will be run on your code and they will be deployed on the next release. \ No newline at end of file diff --git a/docs/dev_doc.md b/docs/dev_doc.md index bb0507bc..5488b9c0 100644 --- a/docs/dev_doc.md +++ b/docs/dev_doc.md @@ -1 +1,18 @@ -# Changing Documentations +# Updating Documentations + +When the changes apply to the user APIs or any other parts of the code that are relevant, the appropriate documentations should +also be updated. + +## Hosting the docs + +PyPDFForm uses [MkDocs](https://www.mkdocs.org/) for building the documentations. To host the doc site locally simply run: + +```shell +mkdocs serve +``` + +And you will find the doc site at `http://127.0.0.1:8000/`. + +## Working with the docs + +The doc site utilizes markdown files. Feel free to use any [markdown syntax](https://www.markdownguide.org/) when working with the docs. diff --git a/docs/dev_release.md b/docs/dev_release.md index af81e9ed..e20bd49a 100644 --- a/docs/dev_release.md +++ b/docs/dev_release.md @@ -1 +1,23 @@ # Releasing + +A PyPDFForm release starts with the following steps: + +* A release [issue](https://github.com/chinapandaman/PyPDFForm/issues/646) and [PR](https://github.com/chinapandaman/PyPDFForm/pull/647). +* A new [GitHub release](https://github.com/chinapandaman/PyPDFForm/releases) with auto-generated changelogs. + +Once these steps are done, the CI for deploy will be triggered. + +## Deploy process + +When the GitHub release is created, it will trigger two different CIs: + +* [Deploy](https://github.com/chinapandaman/PyPDFForm/actions/workflows/python-publish.yml), which will create the distribution and upload it to [PyPI](https://pypi.org/project/PyPDFForm/). +* [Deploy Docs](https://github.com/chinapandaman/PyPDFForm/actions/workflows/deploy-docs.yml), which will tear down and rebuild the [GitHub page](https://chinapandaman.github.io/PyPDFForm/) where the doc site is hosted at. + +## When are releases done? + +It depends on the changes that are currently on the master branch but not deployed yet. Generally speaking: + +* Serious bugs are usually released immediately after they are fixed. +* New features can usually wait and are released on a weekly basis. +* Trivial changes are usually bundled with other changes and can wait indefinitely. diff --git a/docs/index.md b/docs/index.md index 73568e9f..468ba4ec 100644 --- a/docs/index.md +++ b/docs/index.md @@ -25,7 +25,7 @@ It also supports other common utilities such as extracting pages and merging mul ## Developer Guide * [Developer Intro](dev_intro.md) -* [Change Requirements](dev_changes.md) -* [Changing Documentations](dev_doc.md) +* [Pull Request Requirements](dev_changes.md) +* [Updating Documentations](dev_doc.md) * [Testing](dev_test.md) * [Releasing](dev_release.md) From 568b843349aae3786b84ccd2f7777b36c998f16b Mon Sep 17 00:00:00 2001 From: chinapandaman <benjaminli801@gmail.com> Date: Mon, 17 Jun 2024 16:20:24 -0500 Subject: [PATCH 07/11] PPF-615: proofreading dev intro --- docs/dev_intro.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dev_intro.md b/docs/dev_intro.md index 50d69a4c..c6094a1e 100644 --- a/docs/dev_intro.md +++ b/docs/dev_intro.md @@ -25,10 +25,10 @@ When you create an issue on GitHub, try your best to follow these conventions: * A PDF form template used by the code snippet. * Screenshots that can help visualize the issue. -## Openning pull requests +## Opening pull requests -Please create an issue before making a pull request. Try your best to follow these conventions when do so: +Please create an issue before making a pull request. Try your best to follow these conventions when doing so: * The PR title should be the same as its respective issue, so `PPF-<issue number>: <title of the issue>`. -* The PR description should contain a brief explanation on the changes. +* The PR description should contain a brief explanation of the changes. * Once opened, the PR should be linked to its respective issue. From 7d80f4b3b843732f19c5eee2263c86e53f1fa425 Mon Sep 17 00:00:00 2001 From: chinapandaman <benjaminli801@gmail.com> Date: Mon, 17 Jun 2024 16:27:43 -0500 Subject: [PATCH 08/11] PPF-615: proofreading dev changes --- docs/dev_changes.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/dev_changes.md b/docs/dev_changes.md index 7b9278ac..fd65f816 100644 --- a/docs/dev_changes.md +++ b/docs/dev_changes.md @@ -1,25 +1,25 @@ # Pull Request Requirements -Whenever a pull request is submitted, there are some expectations on the content before it can be merged +Whenever a pull request is submitted, there are some expectations for the content before it can be merged into the master branch. ## Code changes There isn't any strict rule on how coding should be done for PyPDFForm. The project welcomes code contributions from -anyone and any level of expertise. +anyone with any level of expertise. With that said, there are some conventions that are expected to be followed by your PR: -* Your changes must pass [Pylint](https://www.pylint.org/). To check if this is true simply run `pylint PyPDFForm`. +* Your changes must pass [Pylint](https://www.pylint.org/). To check if this is true, simply run `pylint PyPDFForm`. * Your changes must pass all tests and have 100% coverage. You can read more about testing [here](dev_test.md). -* If you are changing the user APIs or any other parts of the code that are relevant, please update the appropriate documentations too. +* If you are changing the user APIs or any other parts of the code that are relevant, please update the appropriate documentation too. ## Merge process -Your PR will be reviewed before merging into the master branch. On top of that it needs to run through some CI checks: +Your PR will be reviewed before merging into the master branch. On top of that, it needs to run through some CI checks: * Pylint on the source code. -* Tests will be run on three main stream operating systems: `ubuntu`, `windows`, and `macos`, and across all Python versions the library supports on each OS. +* Tests will be run on three mainstream operating systems: `ubuntu`, `windows`, and `macos`, and across all Python versions the library supports on each OS. Once the CI is green and your code looks good, the PR will be merged into the master branch. After every PR merge, [black](https://black.readthedocs.io/) and -[isort](https://pycqa.github.io/isort/) will be run on your code and they will be deployed on the next release. \ No newline at end of file +[isort](https://pycqa.github.io/isort/) will be run on your code, and they will be deployed on the next release. \ No newline at end of file From 675b244ad44a3f5ba54d94cde7c951136a5bcb81 Mon Sep 17 00:00:00 2001 From: chinapandaman <benjaminli801@gmail.com> Date: Mon, 17 Jun 2024 16:32:12 -0500 Subject: [PATCH 09/11] PPF-615: proofreading dev doc --- docs/dev_doc.md | 12 +++--------- docs/fill.md | 2 +- docs/index.md | 2 +- 3 files changed, 5 insertions(+), 11 deletions(-) diff --git a/docs/dev_doc.md b/docs/dev_doc.md index 5488b9c0..2eb83777 100644 --- a/docs/dev_doc.md +++ b/docs/dev_doc.md @@ -1,18 +1,12 @@ -# Updating Documentations +# Hosting Docs Locally -When the changes apply to the user APIs or any other parts of the code that are relevant, the appropriate documentations should +When the changes apply to the user APIs or any other parts of the code that are relevant, the appropriate documentation should also be updated. -## Hosting the docs - -PyPDFForm uses [MkDocs](https://www.mkdocs.org/) for building the documentations. To host the doc site locally simply run: +PyPDFForm uses [MkDocs](https://www.mkdocs.org/) for building the documentation. To host the doc site locally, simply run: ```shell mkdocs serve ``` And you will find the doc site at `http://127.0.0.1:8000/`. - -## Working with the docs - -The doc site utilizes markdown files. Feel free to use any [markdown syntax](https://www.markdownguide.org/) when working with the docs. diff --git a/docs/fill.md b/docs/fill.md index 36c46ad9..5ee31243 100644 --- a/docs/fill.md +++ b/docs/fill.md @@ -2,7 +2,7 @@ PyPDFForm uses a single depth, non-nested dictionary to fill a PDF form. As a result of this process, the filled PDF form will be flattened and no longer editable. This is to prevent future encoding issues, especially when -multiple PDF forms with overlaps on widget names are combined together. +multiple PDF forms with overlaps on widget names are combined. ## Fill text field and checkbox widgets diff --git a/docs/index.md b/docs/index.md index 468ba4ec..d7a5dda1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -26,6 +26,6 @@ It also supports other common utilities such as extracting pages and merging mul * [Developer Intro](dev_intro.md) * [Pull Request Requirements](dev_changes.md) -* [Updating Documentations](dev_doc.md) +* [Hosting Docs Locally](dev_doc.md) * [Testing](dev_test.md) * [Releasing](dev_release.md) From 7bb710515130488d1a4cab6fdd6436ed27905e95 Mon Sep 17 00:00:00 2001 From: chinapandaman <benjaminli801@gmail.com> Date: Mon, 17 Jun 2024 16:44:09 -0500 Subject: [PATCH 10/11] PPF-615: proofreading dev test --- docs/dev_test.md | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/docs/dev_test.md b/docs/dev_test.md index 24ff2e66..03ef17c9 100644 --- a/docs/dev_test.md +++ b/docs/dev_test.md @@ -15,15 +15,17 @@ To generate a coverage report, run: coverage run -m pytest && coverage html ``` -And the coverage report can be viewed by openning `htmlcov/index.html` in a browser. +And the coverage report can be viewed by opening `htmlcov/index.html` in a browser. ## Test breakdown -Each PyPDFForm test is different case by case. However, there is a general paradigm that almost all tests follow. +Each PyPDFForm test is different. However, there is a general paradigm that almost all tests follow. -In most cases, a test executes a sequence of instructions related to PyPDFForm, whether being filling a PDF form or -drawing a text. After the sequence is done, the test should compare the resulted PDF stream with an "expected" PDF stream. -The expected PDF is a file found under the `pdf_samples` directory. +In most cases, a test can be verbally summed up into three steps: + +* Define an expected PDF file that the outcome of the test should look like. +* Execute a sequence of code using PyPDFForm to generate a PDF that should look like the expected PDF file. +* Compare the PDF generated by the test with the expected PDF file. Consider this example test: @@ -53,7 +55,7 @@ def test_fill(pdf_samples, request): assert obj.read() == expected ``` -The test starts by setting an expected PDF `sample_filled.pdf`: +The test starts by defining an expected PDF `sample_filled.pdf`: ```python expected_path = os.path.join(pdf_samples, "sample_filled.pdf") @@ -76,7 +78,7 @@ obj = PdfWrapper( ) ``` -These two lines should almost always be added in every test to make updating old tests easier: +These two lines should almost always be included in every test to make updating old tests easier: ```python request.config.results["expected_path"] = expected_path @@ -91,6 +93,3 @@ expected = f.read() assert len(obj.read()) == len(expected) assert obj.read() == expected ``` - -This concludes the test, which is equivalent to saying after filling `sample_template.pdf` using the -data dictionary, it should look like `sample_filled.pdf`. From d0dc119fbc8b3fc9c389624f5f8552d526e50fec Mon Sep 17 00:00:00 2001 From: chinapandaman <benjaminli801@gmail.com> Date: Mon, 17 Jun 2024 16:49:32 -0500 Subject: [PATCH 11/11] PPF-615: proofreading dev release --- docs/dev_release.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/dev_release.md b/docs/dev_release.md index e20bd49a..b3e93795 100644 --- a/docs/dev_release.md +++ b/docs/dev_release.md @@ -5,18 +5,18 @@ A PyPDFForm release starts with the following steps: * A release [issue](https://github.com/chinapandaman/PyPDFForm/issues/646) and [PR](https://github.com/chinapandaman/PyPDFForm/pull/647). * A new [GitHub release](https://github.com/chinapandaman/PyPDFForm/releases) with auto-generated changelogs. -Once these steps are done, the CI for deploy will be triggered. +Once these steps are done, the CI for deployment will be triggered. ## Deploy process When the GitHub release is created, it will trigger two different CIs: * [Deploy](https://github.com/chinapandaman/PyPDFForm/actions/workflows/python-publish.yml), which will create the distribution and upload it to [PyPI](https://pypi.org/project/PyPDFForm/). -* [Deploy Docs](https://github.com/chinapandaman/PyPDFForm/actions/workflows/deploy-docs.yml), which will tear down and rebuild the [GitHub page](https://chinapandaman.github.io/PyPDFForm/) where the doc site is hosted at. +* [Deploy Docs](https://github.com/chinapandaman/PyPDFForm/actions/workflows/deploy-docs.yml), which will tear down and rebuild the [GitHub page](https://chinapandaman.github.io/PyPDFForm/) where the doc site is hosted. ## When are releases done? -It depends on the changes that are currently on the master branch but not deployed yet. Generally speaking: +It depends on the changes that are currently on the master branch but have not deployed yet. Generally speaking: * Serious bugs are usually released immediately after they are fixed. * New features can usually wait and are released on a weekly basis.