Skip to content

Commit 64a2a49

Browse files
committed
docs(changelog): cut v2.2.0 — observability, devx, error classification, dry_run
Covers the four PRs merged between v2.1.0 and v2.2.0 plus the AGPL-3.0 relicense commit that landed on main during the work. No code changes in this commit. The v2.2.0 tag will be pushed separately and trigger the ghcr.io / cosign / SBOM release pipeline.
1 parent 51e908e commit 64a2a49

1 file changed

Lines changed: 64 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,70 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8+
## [2.2.0] - 2026-07-05
9+
10+
Four PRs on top of v2.1.0. No breaking change.
11+
12+
### Added
13+
14+
- **PR #52** (`feat(observability)`) — script hardening + log
15+
ergonomics:
16+
- Shebang is now `#!/bin/sh -eu` and the script enables
17+
`pipefail` immediately after. Catches silent typos in
18+
variable names (`set -u`) and a failing command in a
19+
pipeline (`pipefail`).
20+
- `::add-mask::` for `INPUT_PASSWORD`, `INPUT_USER` and
21+
`INPUT_SERVER` so even future log lines that echo the
22+
value will be redacted in the rendered log.
23+
- `::group::` / `::endgroup::` around the four heavy
24+
log phases (Inputs received, Resolved configuration,
25+
Upload, final result) so the GitHub Actions UI can
26+
collapse them.
27+
28+
- **PR #53** (`chore(devx)`) — developer-experience polish:
29+
- `.github/dependabot.yml` with weekly scans for both
30+
`docker` and `github-actions` ecosystems. lftp bumps are
31+
restricted to patches; actions are grouped per major.
32+
- ASCII flow diagram of `init.sh` added to the README.
33+
- `Makefile` with `lint`, `test`, `build`, `run`, `release`
34+
and `clean` targets (all no-op if the underlying tool
35+
is not installed).
36+
37+
- **PR #59** (`feat:`) — error classification and log
38+
capture:
39+
- Permanent lftp errors (530 login, 550 permission, 550
40+
no such file) are detected in the captured output and
41+
abort the retry loop early, saving minutes of waiting
42+
on a backoff that would never succeed.
43+
- Every lftp invocation's combined stdout+stderr is
44+
written to a timestamped log file at
45+
`~/.lftp-logs/run-<UTC>.log`. The path is exposed as
46+
the `log_file` action output (via `$GITHUB_OUTPUT`)
47+
so a follow-up step can attach it as a workflow
48+
artifact, and it is printed in the failure banner.
49+
50+
- **PR #60** (`feat:`) — `dry_run` input (default `false`).
51+
When set to `true`, the mirror command gets lftp's
52+
`--dry-run` flag, the plan is reported without any
53+
transfer or delete, and the final success banner switches
54+
to *FTP DRY RUN COMPLETED (no files transferred)* so a
55+
casual reader cannot mistake a dry run for a real upload.
56+
Long-standing TODO in the README.
57+
58+
### Changed
59+
60+
- **Relicense to AGPL-3.0** (commit `f9bfc80`). The
61+
project moves from GPL-3.0 to the GNU Affero General
62+
Public License v3.0 to add the network use clause
63+
(section 13 of the AGPL), ensuring the source remains
64+
available to users interacting with the software over a
65+
network. No code change; only `LICENSE` is updated.
66+
67+
[2.2.0]: https://github.com/airvzxf/ftp-deployment-action/compare/v2.1.0...v2.2.0
68+
[2.1.0]: https://github.com/airvzxf/ftp-deployment-action/compare/v2.0.1...v2.1.0
69+
[2.0.0]: https://github.com/airvzxf/ftp-deployment-action/compare/v1.5.0...v2.0.0
70+
[1.5.0]: https://github.com/airvzxf/ftp-deployment-action/releases/tag/v1.5.0
71+
[1.3.3]: https://github.com/airvzxf/ftp-deployment-action/releases/tag/v1.3.3
872

973
## [2.1.0] - 2026-07-05
1074

0 commit comments

Comments
 (0)