Skip to content

Commit

Permalink
Merge pull request #38 from HaoZeke/addTowncrier
Browse files Browse the repository at this point in the history
MAINT: Add towncrier
  • Loading branch information
mattip authored Feb 11, 2024
2 parents 5dac31b + 065d65d commit f382796
Show file tree
Hide file tree
Showing 9 changed files with 262 additions and 6 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -162,3 +162,5 @@ cython_debug/
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.pdm-python
/docs/source/CHANGELOG.md
/docs/html/
189 changes: 189 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the changes for the upcoming release can be found in <https://github.com/twisted/my-project/tree/main/changelog.d/>.

<!-- towncrier release notes start -->

## [0.1.0](https://github.com/airspeed-velocity/asv_runner/tree/0.1.0) - 11-09-2023


### Bug Fixes

- Default `max_time` is set to `60.0` seconds to fix `--quick`.
([#29](https://github.com/airspeed-velocity/asv_runner/issues/29))
- `asv` will not try to access a missing `colorama` attribute.
([#32](https://github.com/airspeed-velocity/asv_runner/issues/32))

### Other Changes and Additions

- `pip-tools` and `pip-compile` are used to pin transitive dependencies for
read the docs.
([#31](https://github.com/airspeed-velocity/asv_runner/issues/31))


## [0.0.9](https://github.com/airspeed-velocity/asv_runner/tree/0.0.9) - 20-08-2023


### New Features

- Adds a `skip_benchmark` decorator.

```python
from asv_runner.benchmarks.helpers import skip_benchmark

@skip_benchmark
class TimeSuite:
"""
An example benchmark that times the performance of various kinds
of iterating over dictionaries in Python.
"""
def setup(self):
self.d = {}
for x in range(500):
self.d[x] = None

def time_keys(self):
for key in self.d.keys():
pass

def time_values(self):
for value in self.d.values():
pass

def time_range(self):
d = self.d
for key in range(500):
d[key]
```

Usage requires `asv 0.6.0`.
([#13](https://github.com/airspeed-velocity/asv_runner/issues/13))
- Finely grained `skip_benchmark_if` and `skip_params_if` have been added.

```python
from asv_runner.benchmarks.mark import skip_benchmark_if, skip_params_if
import datetime

class TimeSuite:
"""
An example benchmark that times the performance of various kinds
of iterating over dictionaries in Python.
"""
params = [100, 200, 300, 400, 500]
param_names = ["size"]

def setup(self, size):
self.d = {}
for x in range(size):
self.d[x] = None

@skip_benchmark_if(datetime.datetime.now().hour >= 12)
def time_keys(self, size):
for key in self.d.keys():
pass

@skip_benchmark_if(datetime.datetime.now().hour >= 12)
def time_values(self, size):
for value in self.d.values():
pass

@skip_benchmark_if(datetime.datetime.now().hour >= 12)
def time_range(self, size):
d = self.d
for key in range(size):
d[key]

# Skip benchmarking when size is either 100 or 200 and the current hour is
12 or later.
@skip_params_if([(100,), (200,)],
datetime.datetime.now().hour >= 12)
def time_dict_update(self, size):
d = self.d
for i in range(size):
d[i] = i
```

Usage requires `asv 0.6.0`.
([#17](https://github.com/airspeed-velocity/asv_runner/issues/17))
- Benchmarks can now be parameterized using decorators.

```python
import numpy as np
from asv_runner.benchmarks.mark import parameterize

@parameterize({"n":[10, 100]})
def time_sort(n):
np.sort(np.random.rand(n))

@parameterize({'n': [10, 100], 'func_name': ['range', 'arange']})
def time_ranges_multi(n, func_name):
f = {'range': range, 'arange': np.arange}[func_name]
for i in f(n):
pass

@parameterize({"size": [10, 100, 200]})
class TimeSuiteDecoratorSingle:
def setup(self, size):
self.d = {}
for x in range(size):
self.d[x] = None

def time_keys(self, size):
for key in self.d.keys():
pass

def time_values(self, size):
for value in self.d.values():
pass

@parameterize({'n': [10, 100], 'func_name': ['range', 'arange']})
class TimeSuiteMultiDecorator:
def time_ranges(self, n, func_name):
f = {'range': range, 'arange': np.arange}[func_name]
for i in f(n):
pass
```

Usage requires `asv 0.6.0`.
([#18](https://github.com/airspeed-velocity/asv_runner/issues/18))
- Benchmarks can now be skipped during execution.

```python
from asv_runner.benchmarks.mark import skip_for_params, parameterize,
SkipNotImplemented

# Fast because no setup is called
class SimpleFast:
params = ([False, True])
param_names = ["ok"]

@skip_for_params([(False, )])
def time_failure(self, ok):
if ok:
x = 34.2**4.2

@parameterize({"ok": [False, True]})
class SimpleSlow:
def time_failure(self, ok):
if ok:
x = 34.2**4.2
else:
raise SkipNotImplemented(f"{ok} is skipped")
```

Usage requires `asv 0.6.0`.
([#20](https://github.com/airspeed-velocity/asv_runner/issues/20))

### Bug Fixes

- It is possible to set a default timeout from `asv`.
([#19](https://github.com/airspeed-velocity/asv_runner/issues/19))

### Other Changes and Additions

- Documentation, both long-form and API level has been added.
([#6](https://github.com/airspeed-velocity/asv_runner/issues/6))
3 changes: 1 addition & 2 deletions asv_runner/_aux.py
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,7 @@ def recvall(sock, size):
data += s
if not s:
raise RuntimeError(
"did not receive data from socket "
"(size {}, got only {!r})".format(size, data)
"did not receive data from socket " f"(size {size}, got only {data!r})"
)
return data

Expand Down
1 change: 1 addition & 0 deletions changelog.d/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
!.gitignore
1 change: 1 addition & 0 deletions changelog.d/38.misc.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
`asv_runner` now uses `towncrier` to manage the changelog, also adds the changeglog to the generated documentation.
26 changes: 26 additions & 0 deletions changelog.d/readme.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Usage

`towncrier` is used for keeping track of the changelog. The relevant configuration aspects are:
- Each file can be formatted using markdown
- The contents are rendered in bullets
- Each file should be labeled with the corresponding **pull request**, e.g. `NUM.TYPE.md`
+ Where there is no clear corresponding pull request, `+` can be used instead of `NUM`

For mapping the types to headings, the following table can be used:


| **TYPE** | **Heading** |
| feat | New Features |
| api | API Changes |
| bugfix | Bug Fixes |
| misc | Other Changes and Additions |

## Release


```bash
# View the changes
towncrier build --draft --version 0.1.0 --date "$(date -u +%Y-%m-%d)"
# Modify CHANGES.md
towncrier build --version 0.1.0 --date "$(date -u +%Y-%m-%d)"
```
14 changes: 10 additions & 4 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
# Configuration file for the Sphinx documentation builder.
#
# For the full list of built-in configuration values, see the documentation:
# https://www.sphinx-doc.org/en/master/usage/configuration.html
import os
import shutil

# -- Project information -----------------------------------------------------
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
Expand Down Expand Up @@ -56,3 +54,11 @@
"source_branch": "main",
"source_directory": "docs/",
}


# ------------- Copying things
docs_source_dir = os.path.abspath(os.path.dirname(__file__))
project_root_dir = os.path.abspath(os.path.join(docs_source_dir, "..", ".."))
changelog_src = os.path.join(project_root_dir, "CHANGELOG.md")
changelog_dest = os.path.join(docs_source_dir, "CHANGELOG.md")
shutil.copyfile(changelog_src, changelog_dest)
1 change: 1 addition & 0 deletions docs/source/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ measure and analyze the performance of your Python packages.
apidocs/index
bplugin-list
CHANGELOG
```

## Indices and tables
Expand Down
31 changes: 31 additions & 0 deletions towncrier.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
[tool.towncrier]
package = "asv_runner"
package_dir = "asv_runner"
all_bullets = false
wrap = true
directory = "changelog.d"
filename = "CHANGELOG.md"
start_string = "<!-- towncrier release notes start -->\n"
underlines = ["", "", ""]
title_format = "## [{version}](https://github.com/airspeed-velocity/asv_runner/tree/{version}) - {project_date}"
issue_format = "[#{issue}](https://github.com/airspeed-velocity/asv_runner/issues/{issue})"

[[tool.towncrier.type]]
directory = "feat"
name = "New Features"
showcontent = true

[[tool.towncrier.type]]
directory = "api"
name = "API Changes"
showcontent = true

[[tool.towncrier.type]]
directory = "bugfix"
name = "Bug Fixes"
showcontent = true

[[tool.towncrier.type]]
directory = "misc"
name = "Other Changes and Additions"
showcontent = true

0 comments on commit f382796

Please sign in to comment.