@@ -5,6 +5,70 @@ All notable changes to this project will be documented in this file.
55The format is based on [ Keep a Changelog] ( https://keepachangelog.com/en/1.1.0/ ) ,
66and 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