- [Upload (what I have to do)](#upload-what-i-have-to-do)
- [Get the variables](#get-the-variables)
- [Create an archive](#create-an-archive)
- [Signing](#signing)
- [Checksums](#checksums)
- [Python project on PyPI](#python-project-on-pypi)
- [Update the entry](#update-the-entry)
- [Create a new release file](#create-a-new-release-file)
- [Update the changelog](#update-the-changelog)
- [Update the table of contents](#update-the-table-of-contents)
- [Download (what you have to do)](#download-what-you-have-to-do)
- [Get the public key](#get-the-public-key)
- [Download the repository](#download-the-repository)
- [Check the signature](#check-the-signature)
- [Run the checksums](#run-the-checksums)
- [Extract](#extract-1)
- [Python project on PyPI](#python-project-on-pypi-1)
<!--TOC-->
@ -60,149 +45,137 @@ You may contact me directly to obtain the public key fingerprint in a different
## Terminology
- `project_dir`: the full path directory of the project
- `project`: the project name
- `project_python_module`: the python module name of the project.
For example: `md-toc` is `md_toc`
- `tag`: the git tag name which is usually [semver](https://semver.org/)ed.
- `tag_raw`: same as `tag` but pad each component of the tag with 6 zeros.
For example: `12.121.5` becomes `000012.000121.000005`
- `signing_key`: the public key file used to sign the archive file
- `has_changelog`: the project has a changelog entry for a specific release. Value must be either `true` or `false`
- `is_on_pypi`: the project is on PyPI. Value must be either `true` or `false`
- `project_version_release_date`: the release date of a software version (tag) in UTC format.
This is the one liner command to get the date:
```shell
python3 -c 'from dateutil import parser as dateutil_parser; from dateutil.tz import UTC; import sys; p = dateutil_parser.parse(sys.argv[1]); u=p.astimezone(UTC); print(u.strftime("%Y-%m-%d"))' "$(git tag -l --format='%(taggerdate)' $(git describe --tags $(git rev-list --tags --max-count=1)))"
```
- `project_version_release_timestamp`: the timestamp of a software version (tag) in UTC format.
This is the one liner command to get the timestamp:
```shell
python3 -c 'from dateutil import parser as dateutil_parser; from dateutil.tz import UTC; import sys; p = dateutil_parser.parse(sys.argv[1]); u=p.astimezone(UTC); print(u.strftime("%Y-%m-%d %T"))' "$(git tag -l --format='%(taggerdate)' $(git describe --tags $(git rev-list --tags --max-count=1)))"
```
- `changelog_slugified_header`: the slugified header corresponding to a tag in a changelog file
- `url`: a generic url
- `PyPI_download_page`: the URL of the download page of the package on PyPI
Commands are to be run in the project directory.
| Variable | Description | Command |
|----------|-------------|---------|
| project_dir | the full path directory of the project | `export project_dir="$(pwd)"` |
| project | the project name | `export project="$(basename "$(pwd)")"` |
| project_python_module | the python module name of the project. For example: `md-toc` is `md_toc` | `project_python_module="$(basename "$(pwd)" | tr '-' '_')"` |
| project_version_release_date | the release date of a software version (tag) in UTC format | `project_version_release_date="$(python3 -c 'from dateutil import parser as dateutil_parser; from dateutil.tz import UTC; import sys; p = dateutil_parser.parse(sys.argv[1]); u=p.astimezone(UTC); print(u.strftime("%Y-%m-%d"))' "$(git tag -l --format='%(taggerdate)' $(git describe --tags $(git rev-list --tags --max-count=1)))")"` |
| project_version_release_timestamp | the timestamp of a software version (tag) in UTC format | `project_version_release_timestamp="$(python3 -c 'from dateutil import parser as dateutil_parser; from dateutil.tz import UTC; import sys; p = dateutil_parser.parse(sys.argv[1]); u=p.astimezone(UTC); print(u.strftime("%Y-%m-%d %T"))' "$(git tag -l --format='%(taggerdate)' $(git describe --tags $(git rev-list --tags --max-count=1)))")"` |
| tag | the git tag name which is usually [semver](https://semver.org/)ed | `export tag="$(git describe --tags $(git rev-list --tags --max-count=1))` |
| tag_raw | same as `tag` but pad each component of the tag with 6 zeros. For example: `12.121.5` becomes `000012.000121.000005` | - |
| signing_key | the public key file used to sign the archive file | - |
| has_changelog | the project has a changelog entry for a specific release. Value must be either `true` or `false` | - |
| is_on_pypi | the project is on PyPI. Value must be either `true` or `false` | - |
| changelog_slugified_header | the slugified header corresponding to a tag in a changelog file | - |
| url | a generic url | - |
| pypi_download_page | the URL of the download page of the package on PyPI | - |
## Methods
### Upload (what I have to do)
What follows are the steps I use to upload the software on this page.
What follows are the steps I use to upload the software page.