Skip to content

Commit 5f0a986

Browse files
committed
Prepare 0.6.1 release metadata
1 parent 9b9e1a9 commit 5f0a986

3 files changed

Lines changed: 131 additions & 6 deletions

File tree

CHANGELOG.md

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# Changelog
2+
3+
All notable changes to this project are documented here.
4+
5+
## 0.6.1 - 2026-05-12
6+
7+
First usable experimental pre-1.0 release.
8+
9+
### Added
10+
11+
- Fluent `Email` builder with sender, recipients, subject, text, HTML, custom
12+
headers, attachments, data attachments, and inline data attachments.
13+
- MIME renderer for plain text, HTML, `multipart/alternative`,
14+
`multipart/mixed`, `multipart/related`, UTF-8 subjects, UTF-8 display names,
15+
UTF-8 attachment filenames, CRLF normalization, and `Bcc` envelope-only
16+
handling.
17+
- SMTP client built directly on AMPHP sockets with TCP, implicit TLS,
18+
STARTTLS, STARTTLS-if-available, `AUTH PLAIN`, `AUTH LOGIN`, envelope
19+
commands, `DATA`, dot-stuffing, and `QUIT`.
20+
- Retry decorator for temporary SMTP failures with tested max-attempt and
21+
backoff behavior.
22+
- Process-local rate limiting decorator with tested timing behavior.
23+
- `UnknownDeliveryState` for connection loss after the DATA body is sent.
24+
- Header and attachment safety validation for common injection vectors.
25+
- GitHub Actions CI for PHP 8.2, 8.3, and 8.4.
26+
- Manual SMTP interoperability checklist and one recorded controlled real-MTA
27+
submission test.
28+
29+
### Notes
30+
31+
- AmpMailer is experimental and still lightly tested. Test it carefully and for
32+
a long period in your own environment before relying on it in production.
33+
- DKIM is intentionally out of scope.
34+
- This package is inspired by `nette/mail`, but it is not API compatible with
35+
Nette.
36+
- Use for spam, unsolicited email, abusive bulk email, phishing, malware,
37+
harassment, unlawful mail, or provider-policy violations is strongly
38+
prohibited.
39+
40+
### Packagist Release Notes
41+
42+
AmpMailer `0.6.1` is the first usable experimental release of a small AMPHP v3
43+
mailer. It includes a fluent message builder, MIME rendering, direct SMTP
44+
transport over AMPHP sockets, STARTTLS, SMTP AUTH PLAIN/LOGIN, retry/backoff,
45+
process-local rate limiting, local test coverage, PHPStan, CI, and a controlled
46+
real-MTA interoperability smoke check.
47+
48+
This release is experimental and still lightly tested. Test carefully and for a
49+
long period in your own environment before using it in production.
50+

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# AmpMailer
22

3+
[![CI](https://github.com/dam2k/ampmailer/actions/workflows/ci.yml/badge.svg)](https://github.com/dam2k/ampmailer/actions/workflows/ci.yml)
4+
35
Small AMPHP v3 mailer with MIME rendering, SMTP transport, retry, and rate limiting.
46

57
## Project Status
@@ -8,8 +10,8 @@ AmpMailer is experimental and still lightly tested. Test it carefully and for a
810
long period in your own environment before relying on it in production.
911

1012
The current target is `0.6.1`: a small, usable pre-1.0 release with a stable
11-
core API, strong local test coverage, and explicit warnings about the remaining
12-
production validation work.
13+
core API, strong local test coverage, and explicit warnings about production
14+
validation.
1315

1416
## Anti-Spam Policy
1517

@@ -57,10 +59,8 @@ Implemented:
5759
- PHPUnit tests, PHPStan analysis, Composer validation, and GitHub Actions CI
5860
for PHP 8.2, 8.3, and 8.4.
5961

60-
Known gaps before tagging `0.6.1`:
61-
62-
- Prepare release metadata: changelog, CI badge, Packagist notes, and `0.6.1`
63-
tag procedure.
62+
Release metadata, Packagist notes, and the `0.6.1` tag procedure are documented
63+
in `CHANGELOG.md` and `docs/release.md`.
6464

6565
## Basic Usage
6666

docs/release.md

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
# Release Procedure
2+
3+
This document describes the manual release flow for AmpMailer.
4+
5+
## Pre-Release Checks
6+
7+
Run these commands from the repository root:
8+
9+
```bash
10+
php /home/dino/temp/prove/php/composer.phar validate --strict
11+
php /home/dino/temp/prove/php/composer.phar test
12+
php /home/dino/temp/prove/php/composer.phar analyse
13+
```
14+
15+
Check GitHub Actions after pushing release metadata:
16+
17+
- The `CI` workflow must be green on `main`.
18+
- PHP 8.2, 8.3, and 8.4 jobs must all pass.
19+
- Do not tag a release from a red commit.
20+
21+
Check repository hygiene:
22+
23+
```bash
24+
git status --short --branch
25+
rg -n "password|passwd|secret|192\\.168\\.|@tuxweb" README.md CHANGELOG.md docs src tests composer.json phpunit.xml.dist phpstan.neon.dist
26+
```
27+
28+
The second command is a defensive scan. Review any match before tagging.
29+
30+
## Packagist
31+
32+
Package name:
33+
34+
```text
35+
dam2k/ampmailer
36+
```
37+
38+
Suggested description:
39+
40+
```text
41+
Small AMPHP v3 mailer with MIME rendering, SMTP transport, retry, and rate limiting.
42+
```
43+
44+
Use the `CHANGELOG.md` entry for the GitHub release body and Packagist release
45+
notes. Keep the experimental warning in the release text.
46+
47+
## Tag 0.6.1
48+
49+
After all checks are green:
50+
51+
```bash
52+
git fetch origin
53+
git status --short --branch
54+
git tag -a 0.6.1 -m "Release 0.6.1"
55+
git push origin 0.6.1
56+
```
57+
58+
Then verify:
59+
60+
- The tag appears on GitHub.
61+
- GitHub Actions for the tag, if triggered, are green.
62+
- Packagist sees the new version.
63+
64+
## Failure Handling
65+
66+
If CI fails:
67+
68+
1. Open the failed GitHub Actions job.
69+
2. Read the first real error in the log.
70+
3. Reproduce the same command locally.
71+
4. Fix the code or documentation.
72+
5. Run all pre-release checks again.
73+
6. Commit and push the fix.
74+
7. Tag only after the latest commit is green.
75+

0 commit comments

Comments
 (0)