12 Commits

Author SHA1 Message Date
fe12222722 Update GPG key reference in Helm package command to use specific signing key
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 14s
2025-05-12 23:04:25 +02:00
be91c9677a Add step to display GPG keys in CI environment
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 12s
2025-05-12 23:02:48 +02:00
33fbe9e443 Add error handling to legacy secret-keyring build step
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 13s
2025-05-12 22:50:14 +02:00
c09e1a2978 Update PGP public key block with new key data
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 29s
2025-05-12 22:41:15 +02:00
337b9e9f0b Fix GPG command to include passphrase for secret key export in package-and-deploy workflow
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 20s
2025-05-12 22:21:31 +02:00
91bb7a4fd1 Enhance GPG command in secret-keyring build step with additional flags for improved functionality
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 28s
2025-05-12 22:19:21 +02:00
005aab7ec9 Fix GPG command to use batch mode for secret-keyring build step
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 36s
2025-05-12 22:16:55 +02:00
c2ccd5e27f Fix GPG command to remove unnecessary batch flag in secret-keyring build step
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 25s
2025-05-12 22:12:50 +02:00
7cf5f43299 Fix output redirection syntax for GPG secret key export in package-and-deploy workflow
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 22s
2025-05-12 22:08:58 +02:00
3eaa7e6b60 Add initial changelog for BookStack Helm chart version 0.1.0+up25.2.3
Some checks failed
Package & Sign Helm Chart / build (release) Failing after 2m4s
2025-05-08 17:20:44 +02:00
fac90514e4 Add script to generate CHANGELOG.md from Chart.yaml annotations 2025-05-08 17:20:36 +02:00
f22cdaa818 Add annotations for license, links, maintainers, and changes in Chart.yaml 2025-05-08 17:20:28 +02:00
5 changed files with 157 additions and 11 deletions

View File

@@ -6,7 +6,7 @@ on:
jobs:
build:
runs-on: ubuntu-24.04
runs-on: ubuntu-22.04
env:
CHART_DIR: bookstack/
CHART_VERSION: ${{ github.event.release.tag_name }}
@@ -31,13 +31,20 @@ jobs:
passphrase: ${{ secrets.GPG_PASSPHRASE }}
trust_level: 5
- name: Show keys in runner
run: |
echo "🔑 Keys inside CI:"
gpg --list-secret-keys --keyid-format LONG
# 4) “Generation1”SecretRing für Helm erzeugen (TMP, 600Rechte)
- name: Build legacy secret-keyring
run: |
set -euo pipefail
install -m 700 -d /tmp/gpgring
gpg --batch --pinentry-mode loopback \
gpg --batch --yes --pinentry-mode loopback \
--passphrase "$PASSPHRASE" \
--export-secret-keys "$GPG_KEY_ID" \
--output /tmp/gpgring/secring.gpg
>/tmp/gpgring/secring.gpg
chmod 600 /tmp/gpgring/secring.gpg
echo "$PASSPHRASE" > /tmp/gpgring/passphrase.txt
chmod 600 /tmp/gpgring/passphrase.txt
@@ -50,7 +57,7 @@ jobs:
helm package "$CHART_DIR" \
--version "$CHART_VERSION" \
--sign \
--key "$GPG_KEY_ID" \
--key "Morlana Signing" \
--keyring /tmp/gpgring/secring.gpg \
--passphrase-file /tmp/gpgring/passphrase.txt

6
CHANGELOG.md Normal file
View File

@@ -0,0 +1,6 @@
# Changelog
## 0.1.0+up25.2.3 2025-05-08
- **Added** Initial Helm chart for BookStack. ✦ Packages upstream BookStack v25.2.3 [Project homepage](https://www.bookstackapp.com/)
- **Added** ✦ Ingress, persistence, TLS and SMTP settings readymade
- **Added** ✦ Includes optional MariaDB and Redis subcharts [MariaDB subchart](https://artifacthub.io/packages/helm/bitnami/mariadb) [Redis subchart](https://artifacthub.io/packages/helm/bitnami/redis)

View File

@@ -18,3 +18,34 @@ dependencies:
version: ">=21.0.0 <22.0.0"
repository: "oci://registry-1.docker.io/bitnamicharts"
condition: redis.enabled
annotations:
artifacthub.io/license: MIT
artifacthub.io/links: |
- name: Git Repository
url: https://git.morlana.online/f.weber/bookstack-chart
- name: Issues
url: https://github.com/flweber/helm-bookstack/issues
- name: GitHub Mirror
url: https://github.com/flweber/helm-bookstack
artifacthub.io/maintainers: |
- name: Florian Weber
email: kosmos@morlana.net
artifacthub.io/signKey: |
fingerprint: BCE21EEA25DE14B418196DA1FF6F7246FAA99C30
url: https://raw.githubusercontent.com/flweber/helm-bookstack/refs/heads/main/pubkeys/morlana.asc
artifacthub.io/changes: |
- kind: added
description: Initial Helm chart for BookStack. ✦ Packages upstream BookStack v25.2.3
links:
- name: Project homepage
url: https://www.bookstackapp.com/
- kind: added
description: ✦ Ingress, persistence, TLS and SMTP settings readymade
- kind: added
description: ✦ Includes optional MariaDB and Redis subcharts
links:
- name: MariaDB subchart
url: https://artifacthub.io/packages/helm/bitnami/mariadb
- name: Redis subchart
url: https://artifacthub.io/packages/helm/bitnami/redis

83
generate_changelog.py Normal file
View File

@@ -0,0 +1,83 @@
#!/usr/bin/env python3
"""
generate_changelog.py Wandelt den ArtifactHubChangelog in Chart.yaml
in eine MarkdownDatei (CHANGELOG.md) um.
Aufruf:
python generate_changelog.py # takes ./Chart.yaml
python generate_changelog.py path/to/Chart.yaml
"""
import argparse
import datetime as dt
import pathlib
import sys
import textwrap
import yaml
MD_HEADER = "# Changelog\n\n"
def read_chart(path: pathlib.Path) -> dict:
if not path.exists():
sys.exit(f"❌ Chart.yaml not found: {path}")
with path.open() as f:
return yaml.safe_load(f)
def extract_changes(chart: dict) -> list[dict]:
try:
raw = chart["annotations"]["artifacthub.io/changes"]
except KeyError:
sys.exit("❌ No 'artifacthub.io/changes' annotations found.")
try:
return yaml.safe_load(raw) or []
except yaml.YAMLError as e:
sys.exit(f"❌ Changelog annotations are not in a valid YAML format:\n{e}")
def render_markdown(chart: dict, changes: list[dict]) -> str:
version = chart.get("version", "Unversioniert")
today = dt.date.today().isoformat()
heading = f"## {version} {today}\n"
bullets = []
for item in changes:
kind = item.get("kind", "").capitalize()
desc = item.get("description", "").strip()
links = item.get("links", [])
link_md = ""
if links:
link_md = " " + " ".join(f"[{l['name']}]({l['url']})" for l in links)
bullets.append(f"- **{kind}** {desc}{link_md}")
return MD_HEADER + heading + "\n".join(bullets) + "\n"
def main() -> None:
parser = argparse.ArgumentParser(
description="Generates CHANGELOG.md from Chart.yaml annotations."
)
parser.add_argument(
"chart_yaml",
nargs="?",
default="Chart.yaml",
help="Pfad zur Chart.yaml (Standard: ./Chart.yaml)",
)
args = parser.parse_args()
chart_path = pathlib.Path(args.chart_yaml)
chart = read_chart(chart_path)
changes = extract_changes(chart)
changelog_md = render_markdown(chart, changes)
outfile = chart_path.parent / "CHANGELOG.md"
outfile.write_text(changelog_md, encoding="utf-8")
print(f"✅ CHANGELOG.md generated under {outfile.resolve()}.")
if __name__ == "__main__":
main()

View File

@@ -1,10 +1,29 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
mDMEaBxO9xYJKwYBBAHaRw8BAQdA/7OLLFRkqsTzyufHwHVgB7M6XoX9+df8qCvi
u5xQM7i0OE1vcmxhbmEgQ0kgU2lnbmluZyBLZXkgPGNvbnRhY3QrZGV2ZWxvcG1l
bnRAbW9ybGFuYS5uZXQ+iJYEExYIAD4WIQS84h7qJd4UtBgZbaH/b3JG+qmcMAUC
aBxO9wIbAwUJAeEzgAULCQgHAgYVCgkICwIEFgIDAQIeAQIXgAAKCRD/b3JG+qmc
MLuMAQDM/CPa1DO31dmcI5Xtt9uK3svdv3mZl5GGqqTylcYTXgD+LL4/OPp7XHx+
WTf9NitfTlwpRKJJWec7vp2NG0NQ8wg=
=ACKv
mQINBGgiWykBEACtiiNGno+ZL99rI0qP98Ei+HNcs/MgBWqjPa3/nYv6wK1FVEhu
95w/4Oh/EBEP7vuq5lDfC2JQHiif6AHu4tBB6V2Hx3XLyZE9HY+7SuqIWzeGGr2F
GlD8GkEQ4/HtdHDK+htFUgTPrzW7f/ax5pgvvzAXQcXnC6fIOGsd2IJO0LoEjhTn
KJQqEOgPqGjyfND9+3bfscLJi2CSK23pWz30f1sTzqLM4eMN7poXGqjwjtyKwGog
j66t6Na6A/B3AU9QPP5BB1/Qj09FVsd/InLsyelULG1fZmY0wx2/wiE0VNhenjGa
EejCp8oHieZ++x811ux6wROdJc38HC5lJfXhyob3yJ2OXeGBYnZG8PrT2CqJpTXz
W/5kDVYAyKOh2iiPGADGlMOajnyCgtRI9YEsKYybxlRW7vuvh7ItHb7/iplbamgx
RUrxiJGDMTEENsePTQq4pGOblXptw6PiIogGv9kWJ9WaEIbbAlFJmAIOh2JXRF+Y
JgaCzUjUNRv/z3P5Ymwd2qYxp+RO8QVCPs+/PAqL0BgwCFQXhOC5Yez3/89D5tKy
UOMBxK+xP3i7mj5C6BZa+1ChMdN9yUYpGKVfm16xLVrGBbwWZI6YB4qF+3n4qUtp
Ld7CVEzPVarftb8UpIaqAO/R/MYPUAJeKCykHrlaaOqkj3Dhacqgl+h9FQARAQAB
tDFNb3JsYW5hIFNpZ25pbmcgPGNvbnRhY3QrZGV2ZWxvcG1lbnRAbW9ybGFuYS5u
ZXQ+iQJOBBMBCgA4FiEEiXVuIB5MmbGi6VcS333yWc2PyqoFAmgiWykCGwMFCwkI
BwIGFQoJCAsCBBYCAwECHgECF4AACgkQ333yWc2PyqrhXA//SnEa+hG0hIAB4Ua/
qgqv/7nzpRIFAA5tqSoOPZ0p4YvtsSywc7zJ+ZH7IClvlewOo0Omeo4XiYQCLYSL
LnYv/yqrWVNU35TI29k2RTE4pmcHB9hMdG8heI2c5O3vd9C4yQCWwWKMSD3pEPrq
aLkHkQvLyXZukBeMzNFaVK4wOjPB02MadQLIu9rbUbKW9DvUmt/x8uBVmm/Pq4Ds
HBgxdnOifEhzMG2gG+4UJYt2jfibMwCJpM4d/drs28Qf9dhjj1UHzhhwBW3OpJkJ
E+hHVMObzolefh4eR3gPctIkxuVjYC91FVZkqVV3TgrLKhfgro5ML7IFgCnzHVuZ
PKJsssNZds+2Sv/nf2QtXcGvQgZ3xjNlaQUxE0WTGe+DKx4pMyxx4s+eNYGhA5Yo
rrb9on8TfDNaexU0BDUyt3DLQVxk8niqQPmj9jmD+BrsjWnj7Dn1yCgjre/viZjH
Ys8AHwxSu4qh3XBtjUQ9YDhUMmNqIOtJHiVp97kWbLbQ7CiCI+/7IT6Pk50+GzXV
KaTRfEp6zxpMx2wgsw4CP7aKukLrIFWxDNyQ+030c8TQW8WuL1W3oTzh0iu7DCgR
XVmgS6+YAbxjX/gAD0Dx3jLftQ2Y3PGMWPXtZmtZucIFhg1ArmYb2v1n8sWMi+cK
k/0Bxc8p29/H9s7dv5pVyrx2fcM=
=o6F8
-----END PGP PUBLIC KEY BLOCK-----