Post-Local sync at 2025-06-09T23:36:20Z

This commit is contained in:
Mark Randall Havens 2025-06-09 18:36:45 -05:00
parent dc9c7c26c2
commit 4a2101c75a
12 changed files with 170 additions and 342 deletions

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHav8ACgkQTifTfDWI
cr/onQ//SErngjxex16eFaIv3YAkAA0q5rOE/KdCYyaFbONn5aeQA+UEJgzkQUMz
LLCSjC6snHbmL++qPvOPzBbp8zZ3aktIgZAaOXYC2MUuz7l1O1apfG6pZTVh6x4R
TenLORc7PzqZ65wkIfLdmAJagjVsPHMCGW7SMyfAr+q401TJCNPs3w7Gi4oyvrgZ
V1Kw7dUznrpRzB/KaHzZK998pAOe2P1KaF0J4LdmBYOnBBRvDqAuA/wegS9gpzpq
uJGkxkeENdFyIOpwRrXh+4dbjdcW5YrNosZveJWWL7WJwL/yEfWWaLuI6cGr4wWu
S3g/BJYBj0bLNwoLPG7oCj5DQslW8CS6BseYO4LLnpXsHgJywLaTu6/XxDoylSMt
WhmMq3PH7u6KImbHbgMuY7Y5AdwUe0St3PM8kd4lciRJXSy6exvPGO3+/dlmYrB8
7c4a2jVhmQXW0vQUj+WkR+mqYFAvPJIMYn+jOQyUhdZi9SbCKffgreNFfoI62fNo
w692YF1hE8Kyn0dPClRi+yL+40vbFNwkD7OqoKJYf+gYxuWkrq4q9X/lLcZTeHQe
TxKuNsdz018ZagbYUOXTCH+QtIqOHW5VDCcRY2GExhZiY8YcVuFTZGJaiGdDhPDi
QSvAY6XYR50MAgyHHtwaSsl04iO+9h5y6iqB9Xr4Tm9zZahxMXw=
=vJNA
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHb/0ACgkQTifTfDWI
cr/okhAAnYR+0jB6mIyszpckoQfcRGuMar4BfxjvFbUBzYu/pG/72AnaFZbj5ntT
j/LdYE8MAnMGr74Ky9GFk3X6E9EgNP8jTzz5RdWIUG54KfYr/uszZNXs3tC6fGSS
s+ZSYDkDTKb4YUqFgTzrN0Nyzr0OT8ADKWxgTWLd8yrU50bBDiiu5IVrQ6uGZZ/u
IdjcaZbwHXbYEaKDCkTwbS2tmR9esn+ilBx6Xsh6z+A4tDv++0YKHJ3Lm5NwhiwD
HxBncP/E4rZpmI23BhMFrGOGgCyxbsf9pdZ7Mk7QvWGa1/BMx76PVyUINf/Mh186
ZGmaF9wZrDnJyC6djcDkG7JX9VAEBH5/1E8kXwWlW8mQzzyG59zM86/HLTnJkpln
nD1VebwxJ+hz4uh/gcHMzFuQA7JbwNC522OJkG84+XGcyUyR6BdYYGOobtBGsxvd
CUmq5RXgkmNTX1TiEcqgyVnz7Bcpv40H3t0rDTSJ+1iuIVDzO4Wso0lEoA+i2OXI
xbxmu0RYEY2EN09+S2C1/CY3jN0N+PgRGTV5MOm9xGL61JsZD7byPz4/ABg5FFxW
J4yNpQa86jIqGq1IEBt8hTf+pZXCl36xhRMEilbgazsQ4kYFLuG/sBol4yC9BSjl
MiQ928dtmIIe42pGMkd4YFFsdeF8B6XFZMg5aW54b3HSfF82A44=
=GjBh
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHauIACgkQTifTfDWI
cr/KQw/9HkOl1IRURvjmi1tiEuguuEXIvj5BNVBmIRAYE5FmsOr+495FK2fL7ArT
/4Gcpako1VTwmYEzF+JdJqqb9kVAbnzkOdXsV6Mb7eaGpRsleU+xSQpDyAP/K8yC
VDB47UXxeDB/aiEfcLiNcWdqVLBdin8YMlbep1UQk/zjTuTAc18JtYnSqZgwcYef
7ya6KYhar9EaV7mou9e6o71nwaxb+CMMsXONp2yMigyO4+a9fKWHEvFxNlyUKs5Q
7I3rQO7ZwqJ0JkgT6QxcVYBl+vp/OfqubWL8CbpH6COTfLM5+120mb3eALabMgDc
rC7tLhcZTGmH5mD4qteZTA8hWIExJGPB9vfTdFWvr+gZTh7E3Xg9hDB2M2PFqa98
RFeSv5EZR/WWER26FdfBIYw9VGn8j9V9AVYIOYHXsmTjqfltQRk0348tt9nebhh0
nFDg8Kgem6BUQhF+GCp0BBn1AJFfDVBROCLkYmK26uJ0uSURl2Xu4uZUMLutSOig
9vGPFYhkstJlPYcq7BM95SoptFeVYadAIX2tMOui/IuxM6ZEYCYcrHEBd2s+YxQp
YD6/cGrhDGjq6pTHgofLsvLqmDY+z4L5v1nr4eLxzKxJFeEry+EAzNYD/BupgE7F
LG7vjaHmxNKOWGxz92kU01v9wBR/MRstwXZQvTcrx7Ip2U7r3dc=
=x5Er
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAAACgkQTifTfDWI
cr8ZwQ/+KJoD/nCxWWeaxLpTJTU7O7HtnvtCSXzbRYAIFxqfbkiR663KiroIeLL5
AWMOFSQbgVZsIHsNA+HnEdZ3gxF0s2gj7Fd0BQrERuP4/ZG6yQ394khDwpPx3lUB
lSgoGzG86SMD04OuXOvZjLAnZKZ1ECrEHdRHiGkx4KMPC2Z7EP16WbxWCGDuhj1G
3HINr9xoMau68Zs7wTQdMkpvwEcn+Y7romGOXxRFJsuNJ2w+0q4Jvp9f/OWXIKF4
FWmV0G79moQaz08NnMVCKzd6Ful7VtTN8SxiWex9aIjVjfB0ukWgLfilycA67RN8
5mMh7cxV/mPgqluJuwL800f7Js3uuaq51NHx0kj6UscRUcjZpzJAUi3dqBIa3MKV
H+JP+7AnPplQ5bREsYtZzRbeLQTVCsUorKfARQ9o97NX/gupvFuo2yYUuiBQ90vr
j5DCPnuBpqElfdb02Wz3WP/NPk+jxwsuSX+1uN+09B1ibM5By1SkhubGQANF0Ajm
RjfYozo7/U4Iq/a/Vor/mvG0v3Ips7fhorkVj8FeH02lx330jg29hJ8K92/0WbtJ
hRLNryQszV00Ut7FcIdqIMHyIRI9GwbY+dvxjGi5kYwW2XT86cpX7Pqbkd5Pq7E6
LFxp1JTHuBi4CvO+f8PMIyarX2PfRBJPnJHvP1oxDhWUsof8MCQ=
=FEte
-----END PGP SIGNATURE-----

View file

@ -260,6 +260,12 @@
"branch": "master",
"commit": "8e3f520dbdda6686cc24f79b9d44a5e041797444",
"message": "Generated index.json at 2025-06-09T22:35:36Z"
},
{
"timestamp": "2025-06-09 18:36:43",
"branch": "master",
"commit": "a77e52ebd9eed01da90bdc7fc97c963405570d9e",
"message": "Generated docs/integrity.sha256 at 2025-06-09T23:36:20Z"
}
]
}

View file

@ -499,3 +499,7 @@
Diff Summary:
.gitfield/github.sigil.md | 14 +++++++-------
1 file changed, 7 insertions(+), 7 deletions(-)
[2025-06-09T23:36:44Z] Local: , Branch=master, Commit=689a81f
Diff Summary:
.gitfield/local.sigil.md | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHauYACgkQTifTfDWI
cr/q3g//T4n9i9W2BLzMoHhiRVcYXXEv2voUmOu7mxc/b+BrbjqtteCkqYAO8U78
CKER/YB+ZJ7Mt4rgYZG3+oJ6rgVCrTUFc7SX8e54NzUx054tsX5r8oEKgD673ENe
BguXxC8a2MpNHo+Rl21PXqg96RoPwOKntKhDVnz8SUouSz7Dq9eeTuKT/aJWowQm
FvFtcaqpIlKXdNoPp1nesca7d7pBYi/ODIxy0XAUnRsUTBkUBRDyhUtUbG31BqIe
PfLLW6U/0oDuW7+65D910Ipe78JVOpYWfg5sSDOVYe/Cg8pzMKkd28NQKdLZGNhm
biGNFGLNvk+cKhfyuMiV8lasDdKgaYYuxgL0VeKsFkJ+k5UOyaPrpfLrtbQ+A0Zc
8wp8l6jcpFX28RFx0u3abnC5RneYUopXfSDo+NcS4nYwLQ0RCOIe6ldOlVg8JbV+
oL8xN92ebOfsRr0x0RR0dRZV8OttSameEkkvQgW6o6eTFRBfIqByk+PsIIxpwalY
TM76+5+9f7yNgaFYENKspQBSUzIX9qey40F+qgOJ6iZDah6mxc7KmVpkemkIiY4D
jU/RIlZs7j9ZuY7RziKNydqxc6JmxcH3/ce62EMKza1bDkDRjW4Pe9cXA64ffPDX
bzW9IFDMepBAJoVD97eR9c8SI4hqxfCq+w+MX/5S97Hv51p/7yA=
=dz8e
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAMACgkQTifTfDWI
cr9SDxAAquF8OI28W9ejajYUTbRRPfx8HhXoBEYba+YdlZjdc/pxDs42bBjEq7Vc
zOBax02YVeS6GXqN4GrHYqmHEaOW8bC+4W8UrBO4eTV6LosnliyUiSwDY1td0dTJ
1HAfg7tRYs3Lnxo6HjlVXMngR5VHKhLhBsMNBKoxdVObqedtDYIHApmg9vgxziOQ
IVfEgOrpfkVQq2fxO2OKaHHrDgrMmr/nHjNjybczLoX035qbIYGpNRnD3kHuOVTz
ziR7opP1X8fiy20tA88MK4l9DB5oulGvGIvSh1+6WVmowIe1+oQgJqYRqGJD/s4T
rbegKA1y9+IzaaESUKlIrgiQnBghBD0C4zv6tfri/HF4ZUAP0vEMfQYAoxhVbkAw
kW1kLbdlaaWq8WOso/LARDDtFRndnmZ5A4L/lfViDrM93/yxbNJ6NxNINj9rC4Aa
ExyzKl272ov4kquk2UiXas0h6sIudbArwj4zkD+Wif6lDr0bn0/N2+yn4ZVIlxPa
1xb1mCRGeLylCdYzMf6qpxT6AnKJwSY6cW2jVrF2iPvx/WSOUlOwOmmkNoX4JBDY
2DUEN78nHJ2tILOG1Jy5KXs5jGiFWavx1Eaj87w90czNo+k9UcDbUoF+YoiZBpeA
L5reachrocild2vcNoETVXK4ljDWt1jcnMXWW5hapnag7DbbJ9E=
=Hnbv
-----END PGP SIGNATURE-----

View file

@ -33,17 +33,10 @@ DOCS_NOJEKYLL="$DOCS_DIR/.nojekyll"
DOCS_ROBOTS="$DOCS_DIR/robots.txt"
DOCS_SITEMAP="$DOCS_DIR/sitemap.xml"
DOCS_INTEGRITY="$DOCS_DIR/integrity.sha256"
GITLAB_CI="$REPO_PATH/.gitlab-ci.yml"
CODEBERG_CI="$REPO_PATH/.codeberg-ci.yml"
TIMESTAMP=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
SCRIPT_VERSION="1.5" # Updated for CI/CD and GPG enhancements
SCRIPT_VERSION="1.4" # Updated for GPG integration
PRESERVE_META=${PRESERVE_META:-false} # Preserve existing metadata
FORCE_DOCS=${FORCE_DOCS:-false} # Force overwrite of /docs metadata
SKIP_CI=${SKIP_CI:-false} # Skip CI/CD file generation
GPG_FORCE=${GPG_FORCE:-true} # Force GPG overwrites
CI_STATUS=${CI_STATUS:-mock} # Mock or live CI status
CI_STATUS_GITLAB="unknown"
CI_STATUS_CODEBERG="unknown"
# URLs for each platform
CANONICAL_URL="https://remember.thefoldwithin.earth/mrhavens/$REPO_NAME"
@ -135,7 +128,7 @@ sign_file() {
return
fi
for key_id in "${GPG_KEYS[@]}"; do
gpg --armor --detach-sign --default-key "$key_id" --yes --batch "$file" > "$sig_file.$key_id" 2>/dev/null || warn "Failed to sign $file with key $key_id, continuing..."
gpg --armor --detach-sign --yes --default-key "$key_id" "$file" > "$sig_file.$key_id" 2>/dev/null || warn "Failed to sign $file with key $key_id, continuing..."
if [ -f "$sig_file.$key_id" ]; then
git -C "$REPO_PATH" add "$sig_file.$key_id"
git -C "$REPO_PATH" commit -m "Signed $file with GPG key $key_id at $TIMESTAMP" || warn "No changes to commit for $sig_file.$key_id"
@ -165,81 +158,6 @@ copy_to_docs() {
info "Copied $src to $dest and committed"
}
# ╭─────────────────────────────────────╮
# │ CI/CD GENERATION │
# ╰─────────────────────────────────────╮
generate_gitlab_ci() {
if [ "$SKIP_CI" = "true" ]; then
info "Skipping .gitlab-ci.yml generation (--skip-ci enabled)"
return
fi
info "Generating $GITLAB_CI..."
if [ "$PRESERVE_META" = "true" ] && [ -f "$GITLAB_CI" ]; then
info "Preserving existing $GITLAB_CI (--preserve-meta enabled)"
return
fi
cat > "$GITLAB_CI" <<EOF
# GitLab CI configuration for GitField Pages deployment
# Generated by gitfield-sync at $TIMESTAMP (v$SCRIPT_VERSION)
stages:
- deploy
pages:
stage: deploy
script:
- cp -r docs/ public/
artifacts:
paths:
- public
only:
- main
EOF
git -C "$REPO_PATH" add "$GITLAB_CI"
git -C "$REPO_PATH" commit -m "Generated .gitlab-ci.yml at $TIMESTAMP" || warn "No changes to commit for $GITLAB_CI"
info "Generated and committed $GITLAB_CI"
}
generate_codeberg_ci() {
if [ "$SKIP_CI" = "true" ]; then
info "Skipping .codeberg-ci.yml generation (--skip-ci enabled)"
return
fi
if ! git -C "$REPO_PATH" remote -v | grep -q "codeberg.org"; then
info "No Codeberg remote detected, skipping .codeberg-ci.yml generation"
return
fi
info "Generating $CODEBERG_CI..."
if [ "$PRESERVE_META" = "true" ] && [ -f "$CODEBERG_CI" ]; then
info "Preserving existing $CODEBERG_CI (--preserve-meta enabled)"
return
fi
cat > "$CODEBERG_CI" <<EOF
# Codeberg CI configuration for GitField Pages deployment
# Generated by gitfield-sync at $TIMESTAMP (v$SCRIPT_VERSION)
name: Deploy Pages
on:
push:
branches:
- main
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Copy docs to public
run: cp -r docs/ public/
- name: Deploy to Codeberg Pages
uses: actions/upload-pages-artifact@v1
with:
path: public
EOF
git -C "$REPO_PATH" add "$CODEBERG_CI"
git -C "$REPO_PATH" commit -m "Generated .codeberg-ci.yml at $TIMESTAMP" || warn "No changes to commit for $CODEBERG_CI"
info "Generated and committed $CODEBERG_CI"
}
# ╭─────────────────────────────────────╮
# │ METADATA GENERATION │
# ╰─────────────────────────────────────╮
@ -267,11 +185,7 @@ $(printf ' "%s",\n' "${MIRRORS[@]}" | sed '$ s/,$//')
$(for i in "${!GPG_KEYS[@]}"; do
echo " {\"key_id\": \"${GPG_KEYS[i]}\", \"name\": \"${GPG_NAMES[i]}\", \"email\": \"${GPG_EMAILS[i]}\"}" | sed '$ s/,$//'
done)
],
"ci_status": {
"gitlab": "$CI_STATUS_GITLAB",
"codeberg": "$CI_STATUS_CODEBERG"
}
]
}
EOF
# Sanitize rad:rad:
@ -312,11 +226,6 @@ $(for i in "${!GPG_KEYS[@]}"; do
echo "- **${GPG_NAMES[i]}** <${GPG_EMAILS[i]}> (Key ID: ${GPG_KEYS[i]})"
done)
## CI/CD Status
- **GitLab Pages**: $CI_STATUS_GITLAB
- **Codeberg Pages**: $CI_STATUS_CODEBERG
## Mirror Repositories
The project is mirrored across multiple platforms to enhance redundancy and accessibility:
@ -376,11 +285,7 @@ $(printf ' "%s",\n' "${MIRRORS[@]}" | sed '$ s/,$//')
$(for i in "${!GPG_KEYS[@]}"; do
echo " {\"key_id\": \"${GPG_KEYS[i]}\", \"name\": \"${GPG_NAMES[i]}\", \"email\": \"${GPG_EMAILS[i]}\"}" | sed '$ s/,$//'
done)
],
"ci_status": {
"gitlab": "$CI_STATUS_GITLAB",
"codeberg": "$CI_STATUS_CODEBERG"
}
]
}
EOF
# Sanitize rad:rad:
@ -419,11 +324,7 @@ $(printf ' "%s",\n' "${MIRRORS[@]}" | sed '$ s/,$//')
$(for i in "${!GPG_KEYS[@]}"; do
echo " {\"key_id\": \"${GPG_KEYS[i]}\", \"name\": \"${GPG_NAMES[i]}\", \"email\": \"${GPG_EMAILS[i]}\"}" | sed '$ s/,$//'
done)
],
"ci_status": {
"gitlab": "$CI_STATUS_GITLAB",
"codeberg": "$CI_STATUS_CODEBERG"
}
]
}
EOF
# Sanitize rad:rad:
@ -516,11 +417,7 @@ $(printf ' "%s",\n' "${MIRRORS[@]}" | sed '$ s/,$//')
$(for i in "${!GPG_KEYS[@]}"; do
echo " {\"key_id\": \"${GPG_KEYS[i]}\", \"name\": \"${GPG_NAMES[i]}\", \"email\": \"${GPG_EMAILS[i]}\"}" | sed '$ s/,$//'
done)
],
"ci_status": {
"gitlab": "$CI_STATUS_GITLAB",
"codeberg": "$CI_STATUS_CODEBERG"
}
]
}
</script>
</head>
@ -538,14 +435,9 @@ done)
<p>Signed with the following GPG keys:</p>
<ul>
$(for i in "${!GPG_KEYS[@]}"; do
echo " <li>${GPG_NAMES[i]} <${GPG_EMAILS[i]}> (Key ID: ${GPG_KEYS[i]})</li>"
echo " <li>${GPG_NAMES[i]} &lt;${GPG_EMAILS[i]}&gt; (Key ID: ${GPG_KEYS[i]})</li>"
done)
</ul>
<p>CI/CD Status:</p>
<ul>
<li>GitLab Pages: $CI_STATUS_GITLAB</li>
<li>Codeberg Pages: $CI_STATUS_CODEBERG</li>
</ul>
</section>
<section>
<h2>Mirror Repositories</h2>
@ -574,15 +466,15 @@ done)
</section>
<section>
<h2>Why Recursive Sovereignty Matters</h2>
<p>The GitField framework distributes <code>$REPO_NAME</code> across decentralized (Radicle), self-hosted (Forgejo), and community-driven (Codeberg, Gitea) platforms, alongside mainstream services (GitHub, GitLab, Bitbucket). This recursive strategy defends against past deplatforming attempts by individuals such as Joel Johnson, Dr. LeCody, and Andrew LeCody, ensuring the project's persistence and accessibility.</p>
<p>The GitField framework distributes <code>$REPO_NAME</code> across decentralized (Radicle), self-hosted (Forgejo), and community-driven (Codeberg, Gitea) platforms, alongside mainstream services (GitHub, GitLab, Bitbucket). This recursive strategy defends against past deplatforming attempts by individuals such as Joel Johnson, Dr. Peter Gaied, and Andrew LeCody, ensuring the project's persistence and accessibility.</p>
</section>
<section>
<h2>Source Links</h2>
<p>Access the project's metadata and logs:</p>
<ul>
<li><a href="pushed.log">pushed Log</a> (Audit trail of sync operations)</li>
<li><a href="../GITFIELD_GITLAB.md">GitLab</a> (Multi-repo manifest)</a></li>
<li><a href="gitfieldtown.README.txt">GitField</a> README.txt</a> (Metadata directory explanation)</li>
<li><a href="pushed.log">pushed.log</a> (Audit trail of sync operations)</li>
<li><a href="../GITFIELD.md">GITFIELD.md</a> (Multi-repository strategy overview)</li>
<li><a href="gitfield.README.txt">gitfield.README.txt</a> (Metadata directory explanation)</li>
</ul>
</section>
</main>
@ -602,7 +494,7 @@ EOF
generate_docs_css() {
info "Generating $DOCS_CSS..."
mkdir -p "$DOCS_DIR"
if [ -f "$DOCS_CSS" ] && [ "$PRESERVE_META" = "true" ]; then
if [ "$PRESERVE_META" = "true" ] && [ -f "$DOCS_CSS" ]; then
info "Preserving existing $DOCS_CSS (--preserve-meta enabled)"
return
fi
@ -681,19 +573,15 @@ $(printf ' "%s",\n' "${MIRRORS[@]}" | sed '$ s/,$//')
$(for i in "${!GPG_KEYS[@]}"; do
echo " {\"key_id\": \"${GPG_KEYS[i]}\", \"name\": \"${GPG_NAMES[i]}\", \"email\": \"${GPG_EMAILS[i]}\"}" | sed '$ s/,$//'
done)
],
"ci_status": {
"gitlab": "$CI_STATUS_GITLAB",
"codeberg": "$CI_STATUS_CODEBERG"
}
]
}
EOF
# Sanitize rad:rad:
sed -i 's/rad:rad:/rad:/g' "$DOCS_REPOS_JSON"
git -C "$REPO_PATH" add "$DOCS_REPOS_JSON"
git -C "$REPO_PATH" commit -m "Generated docs/repos.json at $TIMESTAMP" || warn "No changes to commit for $DOCS_REPOS_JSON"
sign_file "$DOCS_REPOS_JSON"
info "Generated and committed $DOCS_REPOS_JSON"
sign_file "$DOCS_REPOS_JSON"
}
generate_docs_readme() {
@ -706,7 +594,7 @@ generate_docs_readme() {
cat > "$DOCS_README" <<EOF
# GitField /docs Directory
The `/docs` directory hosts a public-facing, SEO-optimized canonical declaration for the \`$REPO_NAME\` repository, designed for GitHub Pages, GitLab Pages, and Codeberg Pages compatibility and enhanced discoverability.
The `/docs` directory hosts a public-facing, SEO-optimized canonical declaration for the \`$REPO_NAME\` repository, designed for GitHub Pages compatibility and enhanced discoverability.
## Files
@ -726,11 +614,6 @@ The `/docs` directory hosts a public-facing, SEO-optimized canonical declaration
- **sitemap.xml**: Auto-generated sitemap for improved SEO.
- **integrity.sha256**: SHA-256 hash of all metadata files for integrity verification.
## CI/CD Integration
- **GitLab Pages**: Deployed via `.gitlab-ci.yml`, status: $CI_STATUS_GITLAB
- **Codeberg Pages**: Deployed via `.codeberg-ci.yml`, status: $CI_STATUS_CODEBERG
## Purpose
This directory ensures the \`$REPO_NAME\` project is discoverable via search engines and accessible to humans and bots. It declares the canonical repository at [$CANONICAL_URL]($CANONICAL_URL) and links to all mirrors, reinforcing the GitField recursive metadata strategy for sovereign publishing.
@ -796,18 +679,6 @@ generate_docs_sitemap() {
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>$GITLAB_URL/-/jobs/artifacts/main/raw/public/index.html?job=pages</loc>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>https://mrhavens.codeberg.page/$REPO_NAME/index.html</loc>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.9</priority>
</url>
<url>
<loc>$GITHUB_URL/docs/canonical.meta</loc>
<lastmod>$TIMESTAMP</lastmod>
@ -833,8 +704,7 @@ generate_docs_sitemap() {
<priority>0.8</priority>
</url>
<url>
<loc>$GITHUB_URL/docs/.well-known/repo.$REPO_NAME.json</loc>
<url>
<loc>$GITHUB_URL/docs/.well-known/gitfield.json</loc>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
@ -852,7 +722,7 @@ generate_docs_sitemap() {
<priority>0.8</priority>
</url>
<url>
<url>$GITHUB_URL/docs/gitfieldtown.README.txt</loc>
<loc>$GITHUB_URL/docs/gitfield.README.txt</loc>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
@ -860,7 +730,7 @@ generate_docs_sitemap() {
$(for mirror in "${MIRRORS[@]}"; do
if [[ "$mirror" != rad:* ]]; then
echo " <url>"
echo " <loc>$mirror</loc></loc>"
echo " <loc>$mirror</loc>"
echo " <lastmod>$TIMESTAMP</lastmod>"
echo " <changefreq>weekly</changefreq>"
echo " <priority>0.8</priority>"
@ -886,7 +756,7 @@ generate_docs_integrity() {
# Generated by gitfield-sync at $TIMESTAMP (v$SCRIPT_VERSION)
EOF
for file in "$DOCS_CANNONICAL_META" "$DOCS_CANNICAL_MD" "$DOCS_INDEX_JSON" "$DOCS_GITFIELD_JSON" "$DOCS_WELL_KNOWN_JSON" "$DOCS_REPOS_JSON" "$DOCS_PUSHED_LOG" "$DOCS_GITFIELD_README"; do
for file in "$DOCS_CANONICAL_META" "$DOCS_CANONICAL_MD" "$DOCS_INDEX_JSON" "$DOCS_GITFIELD_JSON" "$DOCS_WELL_KNOWN_JSON" "$DOCS_REPOS_JSON" "$DOCS_PUSHED_LOG" "$DOCS_GITFIELD_README"; do
if [ -f "$file" ]; then
sha256sum "$file" >> "$DOCS_INTEGRITY" || warn "Failed to compute SHA-256 for $file, continuing..."
else
@ -895,54 +765,21 @@ EOF
done
git -C "$REPO_PATH" add "$DOCS_INTEGRITY"
git -C "$REPO_PATH" commit -m "Generated docs/integrity.sha256 at $TIMESTAMP" || warn "No changes to commit for $DOCS_INTEGRITY"
sign_file "$DOCS_INTEGRITY"
info "Generated and committed $DOCS_INTEGRITY"
sign_file "$DOCS_INTEGRITY"
}
# ╭─────────────────────────────────────╮
# │ TRIGGER CI PIPELINE
# │ INITIAL SETUP
# ╰─────────────────────────────────────╮
trigger_ci_pipeline() {
local platform=$1
local url=$2
local token_var=$3
local project_id=$4
local timestamp=$(date -u '+%Y-%m-%dT%H:%M:%SZ')
mkdir -p "$GITFIELD_DIR" "$WELL_KNOWN_DIR" "$DOCS_DIR" "$DOCS_WELL_KNOWN_DIR"
if [ "$CI_STATUS" = "mock" ]; then
info "CI status set to mock, skipping $platform pipeline trigger"
echo "[$timestamp] $platform: Pipeline trigger skipped (mock mode)" >> "$LOG_FILE"
if [ ! -f "$LOG_FILE" ]; then
echo "# Push Log for $REPO_NAME" > "$LOG_FILE"
echo "# Generated by gitfield-sync" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
copy_to_docs "$LOG_FILE" "$DOCS_PUSHED_LOG"
return
fi
if [ -z "${!token_var}" ]; then
warn "$platform API token ($token_var) not set, skipping pipeline trigger"
echo "[$timestamp] $platform: Pipeline trigger skipped (no API token)" >> "$LOG_FILE"
copy_to_docs "$LOG_FILE" "$DOCS_PUSHED_LOG"
return
fi
local response
if [ "$platform" = "GitLab" ]; then
response=$(curl -s -X POST \
-H "PRIVATE-TOKEN: ${!token_var}" \
"$url/api/v4/projects/$project_id/pipeline?ref=main" | jq '.status' 2>/dev/null)
elif [ "$platform" = "Codeberg" ]; then
response=$(curl -s -X POST \
-H "Authorization: Bearer ${!token_var}" \
"$url/api/v1/repos/mrhavens/$REPO_NAME/actions/runs" | jq '.status' 2>/dev/null)
fi
if [ -n "$response" ]; then
echo "[$timestamp] $platform: Pipeline triggered, status: $response" >> "$LOG_FILE"
info "$platform pipeline triggered, status: $response"
else
echo "[$timestamp] $platform: Pipeline trigger failed" >> "$LOG_FILE"
warn "$platform pipeline trigger failed"
fi
copy_to_docs "$LOG_FILE" "$DOCS_PUSHED_LOG"
}
fi
# ╭─────────────────────────────────────╮
# │ GENERATE GITFIELD.MD │
@ -991,7 +828,6 @@ The following platforms host the \`$REPO_NAME\` repository, each chosen for its
### 3. Codeberg
- **URL**: [$CODEBERG_URL]($CODEBERG_URL)
- **CI/CD Status**: $CI_STATUS_CODEBERG
- **Purpose**: Codeberg is a community-driven, open-source platform powered by Forgejo, offering a reliable and ethical alternative for hosting git repositories.
- **Value**: Enhances project resilience with its open-source ethos and independent infrastructure, ensuring accessibility and community support.
@ -1002,7 +838,6 @@ The following platforms host the \`$REPO_NAME\` repository, each chosen for its
### 5. GitLab
- **URL**: [$GITLAB_URL]($GITLAB_URL)
- **CI/CD Status**: $CI_STATUS_GITLAB
- **Purpose**: GitLab offers a comprehensive DevOps platform with advanced CI/CD capabilities, private repository options, and robust access controls. It serves as a reliable backup and a platform for advanced automation workflows.
- **Value**: Enhances project resilience with its integrated CI/CD pipelines and independent infrastructure, reducing reliance on a single provider.
@ -1027,7 +862,7 @@ The decision to maintain multiple repositories stems from the need to safeguard
- **Diversity**: Each platforms unique features (e.g., GitHubs community, GitLabs CI/CD, Bitbuckets integrations, Radicles decentralization, Forgejos self-hosting, Codebergs community-driven model, Giteas lightweight efficiency) enhance the projects functionality and reach.
- **Transparency**: Metadata snapshots in the \`.gitfield\` directory (for internal audit) and public-facing documentation in the \`/docs\` directory provide a verifiable record of the projects state across all platforms.
This multi-repository approach, bolstered by Forgejos sovereign hosting, GitHub Pages, GitLab Pages, and Codeberg Pages discoverability, reflects a commitment to preserving the integrity, accessibility, and independence of \`$REPO_NAME\`, ensuring it remains available to contributors and users regardless of external pressures.
This multi-repository approach, bolstered by Forgejos sovereign hosting and GitHub Pages discoverability, reflects a commitment to preserving the integrity, accessibility, and independence of \`$REPO_NAME\`, ensuring it remains available to contributors and users regardless of external pressures.
---
@ -1038,17 +873,11 @@ This multi-repository approach, bolstered by Forgejos sovereign hosting, GitH
- **SEO Metadata**: SEO-friendly metadata with Schema.org JSON-LD is available in [\`docs/gitfield.json\`](./docs/gitfield.json) and [\`docs/.well-known/gitfield.json\`](./docs/.well-known/gitfield.json).
- **Push Log**: The [\`docs/pushed.log\`](./docs/pushed.log) file records the date, time, commit hash, and RID/URL of every push operation across all platforms, providing a transparent audit trail.
- **GitField Directory**: The \`.gitfield\` directory contains internal metadata and platform-specific sigils (e.g., \`github.sigil.md\`). See [\`docs/gitfield.README.txt\`](./docs/gitfield.README.txt) for details.
- **Pages Deployments**: Public-facing declarations are available at:
- GitHub Pages: [$GITHUB_URL/docs/index.html]($GITHUB_URL/docs/index.html)
- GitLab Pages: [$GITLAB_URL/-/jobs/artifacts/main/raw/public/index.html?job=pages]($GITLAB_URL/-/jobs/artifacts/main/raw/public/index.html?job=pages)
- Codeberg Pages: [https://mrhavens.codeberg.page/$REPO_NAME/index.html](https://mrhavens.codeberg.page/$REPO_NAME/index.html)
- **GitHub Pages**: A public-facing, SEO-optimized canonical declaration is available in [\`docs/index.html\`](./docs/index.html), with a sitemap in [\`docs/sitemap.xml\`](./docs/sitemap.xml) and integrity hashes in [\`docs/integrity.sha256\`](./docs/integrity.sha256).
- **GPG Signatures**: Metadata files are signed with the following GPG keys:
$(for i in "${!GPG_KEYS[@]}"; do
echo " - ${GPG_NAMES[i]} <${GPG_EMAILS[i]}> (Key ID: ${GPG_KEYS[i]})"
done)
- **CI/CD Status**:
- GitLab: $CI_STATUS_GITLAB
- Codeberg: $CI_STATUS_CODEBERG
- **Recursive Sync**: The repository is synchronized across all platforms in a recursive loop (three cycles) to ensure interconnected metadata captures the latest state of the project.
- **Push Order**: The repository is synchronized in the following order: **Radicle → Forgejo → Codeberg → Gitea → GitLab → Bitbucket → GitHub**. This prioritizes Radicles decentralized, censorship-resistant network as the primary anchor, followed by Forgejos sovereign, self-hosted infrastructure, Codebergs community-driven platform, Giteas lightweight efficiency, GitLabs robust DevOps features, Bitbuckets enterprise redundancy, and GitHubs broad visibility, ensuring a resilient and accessible metadata chain.
@ -1103,8 +932,6 @@ execute_push() {
local url=$3
local rid=$4
local peer_id=$5
local token_var=$6
local project_id=$7
local script_path
script_path=$(find_script "$script_name") || error "Failed to find $script_name"
info "Executing $platform push with script: $script_path"
@ -1114,9 +941,6 @@ execute_push() {
log_url "$platform" "$url" "$rid" "$peer_id"
git add . || warn "Nothing to add after $script_path"
git commit -m "Post-$platform sync at $TIMESTAMP" || warn "No changes to commit after $script_path"
if [ "$platform" = "GitLab" ] || [ "$platform" = "Codeberg" ]; then
trigger_ci_pipeline "$platform" "$url" "$token_var" "$project_id"
fi
popd >/dev/null
else
error "Script $script_path is not executable"
@ -1131,14 +955,14 @@ run_push_cycle() {
info "Starting push cycle $cycle_number..."
SYNC_CYCLES=$cycle_number
execute_push "gitfield-local" "Local" "" "" "" "" ""
execute_push "gitfield-radicle" "Radicle" "" "$RADICLE_RID" "$RADICLE_PEER_ID" "" ""
execute_push "gitfield-remember" "Forgejo" "$FORGEJO_URL" "" "" "" ""
execute_push "gitfield-codeberg" "Codeberg" "$CODEBERG_URL" "" "" "CODEBERG_TOKEN" "mrhavens/$REPO_NAME"
execute_push "gitfield-gitea" "Gitea" "$GITEA_URL" "" "" "" ""
execute_push "gitfield-gitlab" "GitLab" "$GITLAB_URL" "" "" "GITLAB_TOKEN" "mrhavens/$REPO_NAME"
execute_push "gitfield-bitbucket" "Bitbucket" "$BITBUCKET_URL" "" "" "" ""
execute_push "gitfield-github" "GitHub" "$GITHUB_URL" "" "" "" ""
execute_push "gitfield-local" "Local" "" "" ""
execute_push "gitfield-radicle" "Radicle" "" "$RADICLE_RID" "$RADICLE_PEER_ID"
execute_push "gitfield-remember" "Forgejo" "$FORGEJO_URL" "" ""
execute_push "gitfield-codeberg" "Codeberg" "$CODEBERG_URL" "" ""
execute_push "gitfield-gitea" "Gitea" "$GITEA_URL" "" ""
execute_push "gitfield-gitlab" "GitLab" "$GITLAB_URL" "" ""
execute_push "gitfield-bitbucket" "Bitbucket" "$BITBUCKET_URL" "" ""
execute_push "gitfield-github" "GitHub" "$GITHUB_URL" "" ""
# Regenerate metadata after each cycle to update sync_cycles
generate_canonical_meta
@ -1154,13 +978,11 @@ run_push_cycle() {
generate_docs_robots
generate_docs_sitemap
generate_docs_integrity
generate_gitlab_ci
generate_codeberg_ci
}
# ╭─────────────────────────────────────╮
# │ MAIN EXECUTION │
# ╰─────────────────────────────────────
# ╰─────────────────────────────────────
info "Starting gitfield-sync for $REPO_NAME..."
# Parse flags
@ -1176,24 +998,6 @@ while [ $# -gt 0 ]; do
info "Force docs overwrite flag enabled"
shift
;;
--skip-ci)
SKIP_CI=true
info "Skip CI generation flag enabled"
shift
;;
--gpg-force)
GPG_FORCE=true
info "GPG force overwrite flag enabled"
shift
;;
--ci-status=*)
CI_STATUS="${1#*=}"
if [[ ! "$CI_STATUS" =~ ^(mock|live)$ ]]; then
error "Invalid --ci-status value: $CI_STATUS, must be 'mock' or 'live'"
fi
info "CI status set to $CI_STATUS"
shift
;;
*)
warn "Unknown argument: $1"
shift
@ -1204,8 +1008,8 @@ done
if [ ! -d "$REPO_PATH/.git" ]; then
pushd "$REPO_PATH" >/dev/null
git init
git add . || warn "Nothing to commit"
git commit -m "Initial commit" || warn "No changes to commit"
git add .
git commit -m "Initial commit" || warn "Nothing to commit"
popd >/dev/null
fi
@ -1223,8 +1027,6 @@ generate_docs_nojekyll
generate_docs_robots
generate_docs_sitemap
generate_docs_integrity
generate_gitlab_ci
generate_codeberg_ci
# Run push cycles
run_push_cycle 1

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHaukACgkQTifTfDWI
cr98fA//ZukcmW8omAfCjgchDfBEGGYnGKP21rnPSHmxYbht+2dvGULxbtvqJW3W
bjlB5yh102CnwkHiFj5LdpLAqrif3ZKzPtHg7jjREWZqL1dItk5OXPJuzfw5ETPL
KawoF74sdXHrrdP0iMWfCRAg+WreDZB091D5Arg80QlKYLp/otdrgDTi0UgGFL0F
0tjc6l/B4oI9dTlV1Ts8X3WZerzQx8E6kRkWUz279lFTIsgsau+fnGChMT5HKLwt
0UJ+ISSQw5QL8MthPMYywz3NPm/bQ9ywxHQ2MtZjI8tgwAjPyH5Qav6/oHgHNUtb
DSn9C/FzS26ZIOVPU97ktVcfgA/8nwLQ4eUh5JfdQKxRoV2bRG9nDsiDRbFg80Xl
TYx5kNYBIM18wrWKeob2mP4LFGQintiScuEfKxmosgOTC34rm7U9p8dK2A23sesG
zJ4u44nxCuaLeatQr7soDUj5neVISO1WSl/nk3bwZhyC2PKXCei3/SXgX2JQzjnp
ew+OlRD3qybx9EmXSX7Zh8/YoPyZq9UavFLg7d6Jpi6QMpXmmnDagQ0cbRuxQk9k
lCkHGAI8n2ETFwWHyC2YAzoglQ/zsOQWwCwIJSgt5MSybh31FixzO1zxPZB+6D91
9XY2oFUd9PJs7e0+WGogewXRk1Y6g4kDOiLwC8ChsYNwWkGFTy8=
=Kowh
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAcACgkQTifTfDWI
cr+a9Q//Q9NsAFFEgL+5Qy/kFWQQSO/lz6jBeEbo9pfjccHNF7gLyZXzZniFJU9D
aRTz/92kaGf05QxT5FGlvsL9FTDTM+UibbYysni9nFSuTOXlYpBl8CrDvKPBpn1n
W+4e1yUabFighiVvdXPQa/TNyQshjpaE82KvtJ8UjjB8bivrSSHRxVgCZCDhbilm
FBJ6N6dY3zVPIoGn9PoJpF0RFMc8cCjhYrjy1CJ7uO3ACz1de2XhM+tYWNYwHVVa
Hg2C/gW7DHkC8669Py/BGMcZ1uFx4W9DJqcymXAQehuW6NUUPWkCM33pOm+8kIFl
TP4KHUtYQYTIrpwjJ9W2ARAdvdT0CXuoEl8jdrU9JZ+w8qOlnHq2Okg+lQrsCtjm
N5Wt7iaaJqHr1L6fFYxwoFj/EDWB09m3vbRbAMOa8MIBZIOmcfnnUEoqR4ZD0XF3
L+L72ylYZA6V4g7PcSFfWtDwsBNH6PW/pgppbaEon06lZC+5FFw3QnO1KdCjjN1f
aLV1SY1tXhxvBR0y6q5xTdo8ul5QltBe7MWpjkl8bM3dK5Z2TuViyI6f14R6KBUa
GjTBDGcjkObecFEg9GelpccDPVy6IfH5WBS9eMYP0fO7mNj8O4NxHdtAAxpQKEvt
X95Owo5OsSxhgUk1xQULyVMIxCyobfYvJ9BvBFLvC/wIBpzWWf0=
=9E7z
-----END PGP SIGNATURE-----

View file

@ -0,0 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHb/8ACgkQTifTfDWI
cr/OcxAAuO37ofdgf51czLvp4Rxk4NdEsUpn3BueRDsmRbfmclWyG3X+sRwsD+Fq
d60Yp/fy/aICyIkUqJ8P0DcASKkKWaahob0wQipWh256oTTAxFrohcKu19h1f432
fClLRdcgm74WJOrcBC7fx0LjAHdUnEV8xRdH+zhOdVyiiBCHn2E4GMQdqwqp7mI3
2r1Q0Mq6ku+BwKoYcRdZsoFVGJOi39CZpvFRqZYCoclmc+Un23P0E6gucY1FIxFN
xQtYXmgu/It1y4ZXUVMyZPrisqqlBfMcMbRMB06KQ48/goJoq42FV7EBxG9ZdZfO
NZmteWULMxFlPQu4JwJkdRAYNN2c6uZd6GQcwg6I5GfMH1qoWnWUrJuQtFRusn0A
rhW0ntY34M5cTaJDSq69yXGg5dmnufFL/2CpjnwOiC/NxHiHJE7w+CHDJ7Qtl1Ie
4sqhstAz113MPeQQpw2biinZ636eHZODdvboyJzuVFssbSCwI22TopTdLj1s9sEB
xduwGDzmVra28qhg1aeeqT+4tWxBwn6dwamPsLqFJLpwO7q9fcMGd7cENCVIcS6I
0bH2Nrc0kFpqaSsnLtutIjTJ5MCLlUGl2CHpXHWoApO2AkeuZn7ac3gJWucrMYvE
WkTN+uPJ531AG7zXJsPJEOP67ttBjyFodEcVTYcgZueLqJIW7js=
=uwJG
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHaucACgkQTifTfDWI
cr9ZJg//W1s21IygAOXTe/RGRk3cBEZo67OrTbkjHZW0TFB4nomuhl4HbFfeD9LQ
2k+obj+fjzvseL8B+nOBvrK1n/2OiLsrJihHg2mbWe7HKm8jG/cRfAf++nQ3j024
zMMtKakRcJHAvIsa+Bg1vwfJdEvKyaEhO+lGsiIadpdmVEmPuBWZFmsjEZzs1tU6
PNQadE7b7bM1UREjpOZRqVvSZYZ2+ngicC/AdHiFD8tlwMGpeE5k8CPjsZouPznv
lUySiRKfv0dIC3+vtIL7Sfr8b+Ux3gdKvCaqEY0C4+FTIR1Cq/abslNPl0rYDI2W
KWTkG/JPA/OJTWrNzGzuatQKdbPJxqv56K5PL7A+tGvbqVjfkrpmUFODJYmMhcXx
8rdod4Znt3TRk6EPrknymPdY0zk1kPI4LkMTdNBzDruVQBrF/LXHY1dQ1y4ZkFWR
P8QQS2k0hQ9+//lA0dvIabRL2u6c52zbNswLYbC2FDKmwRb2QMIenrxqhNXEhMGb
LtoO0MC3O2V1wiahpaXkQvWR2ylbMhRMQWNBGYFYTWA2l8PLRSgsI01+G2FH2JbX
yhQZDdLChwlmRytrUPiIOv8hx+R0TVgKizExXKu2I3aoFQviexs8aLBqGqo0vknn
ku3IssxPHC8rfc4AsFgxjPeHxFRL3iT4m9Gxhum7AVQFZMssDRk=
=bFPR
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAUACgkQTifTfDWI
cr80PQ//e53vdbf5s9ISzz8jHVoD/Kpuf3y0yTmAW5/UiR8dcX5eo/b7g74c0pjI
v4A7N8qt5EEuv1WHby3zPMeo69rJ3FBI+PLpwLo2+VpeMYjblatBI9Px5vZsNbyG
vJ/hlyzP0jpUf1qamKXPjebQtcMRN/cY2gUHMwZzl8IV+ZggeCwTKiuYZgGCAL8N
frKqrZ4nj0qBkjmemgMsRpJQ8eYLDHsTnisbCKGzcX60H12zXTlUU4XYiofdcdUl
tHH4qdpBV9FadB9ypSkNkGeQe5NlkTt2sbrOVaTjPvlGkyjFkVyPFP9yYWESv7oJ
MB8Om71w/M53YgpV7/b22lTPKG9DvNVSS5zt4fVjRq0libeaM5vWZ8Uda1ARbnm/
yBdSwfSUsXWBcxelYqPdXxjyoAC3lKEkJP3tCFx6mvJnlRmEpA9xALt3FB/mGrw6
STHiD+0tRF1bv5cdP0enFk09B/pKMBcTuhW56r9XaECqw7zacwYk/OViUYQBtLT+
nZRewMds5KtGgn1klviAiLIcu9rE9iZ66UvPxZD29lJIauIRxUi7LDx5zNw3EhWL
DrVuxRPODjKs/D/owQWF9yw7WgQlb2Pnfhs1B1KgOpTOe5UAhUr4QZ+Oraogd7k7
OoRa2zx8fHbzQLVyHzq7YmFk8uUxbOrZvTg2aDWck/sgH8wckLs=
=Iq+Z
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHauQACgkQTifTfDWI
cr/y5hAArDCV0nDEh9RVatuGltKDwH+ncRp7GZKXc1cLSVUsBSR1Lb8+fbBjmuYq
iZlT97ujzPAMDO8B3LID+jacOQ/+jqyhyLRdOT4hpOA+BsUmdLCQl1X87VnOoq0h
rwSNaGlPcGeq9pMN4T1boUNJsCnrwhUcCay+hDS50mCd/Bh/v9yuc+oV6mRWEiDp
wnUPx9XvQJRzDs3xR92do/yixlZFHEYoHMqM2GYi4XU0Nw5XEfxiuJhYta2zuyFy
UnYt/oe54fKEXxWp5LC2SU9oBFfryYFfbiUrPHaQLt2fSlVD2fAAqkqEIdRf6QfJ
Ur7Q/5MElszmguu67cgWYyFkoSigE2TGRYbV0LdG3ZsDA+qHD/L7agv5wNZW6lv6
h5zZgIrbpWurYFiNztB8/89tnw3Oau51LYcnHuZeF2typELE39qjCJK3iAiETa47
mnFBz6l8Q9cbpgV1E4nWsn0Zy9SGJMcv+yw3hNsBV+OSwxNnLiHpeNcdrHOTdfVS
veUlnexhZr1sQOD5r4jTn7Hb5qp7xo6GklAQAoije7VEf9/VhsTwG6aMXrmtKqbz
tPAgBIjrBXcK3pOuAAsWqvuHMmTRJibPnL0MEx6ZjYBmsqrLrcNtZIPeVy7jI2eP
zIdmo/PniPailFZBbjn2djmL6Hj/Hu+B3NApD47056541jt1S2I=
=I1yO
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAIACgkQTifTfDWI
cr+EphAAjheQ4Q2/3c+/co5LAegBhP2/OC43l6G7uP5uGBfZOenBozG3mn7gCeTW
9cLNhs/k0OT4RxY8Gs7TQ8OKAsGRc+6aGDTurGhyP4pfHnzeOivNxyk6t/3ZbXcC
edGLbjy7GeygwyU2fTBRbWaG7QUSa5e9TomTfj05ysWUp88JFHcG4YaXiZUURSwk
qC61+ggI4oDk/OSbjcE7xduU5FZ0fI12sZ4gRmCB5+vcmm8ozC3EehpZenMSeURl
fMBDeRkVW5mWihoCDCxEIJZOwTsMbLmUPwVhUwNfFsxEWxE6hlGQeHtWhaDzYhue
lESk++Evqv4inkwhMmK+4iTiMHP6UjcFc9/qo8QbTVmmTevyz2sWaSAl6149L8J4
sZol2S9WLIRSS90EOblC/VAVofD0KmVujrPiE7GC5swhdu8FKcpLsZVuMcjAAOKJ
lFDW2DBC5xD2e6Ho/YZ27rmdldm6XWZbDSgmh8Vs1lE2zsEMbOhDN3H6z6h6y1Rz
mr0sEK/VftZFXgvsIkgpXle9lrB8+PPcgHoUgvrOsi/m2ujJ29U4na33GQEVz7nn
xCSSYkQ3azGJb2ejYoAIZVBcNW8/wzsk1kyKDKhfkvN69As+it07nZVlxPoXc5M3
hcInsvNJy3ttfxrVPFkF//wGOlZDKWpfaJ6dG+bVTHYYd8imeZg=
=eZDl
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZrUACgkQTifTfDWI
cr/wNw//TwyN6YbX4g0GJWO+W75MxkeKYU9F4gZG7OMpw4ldKYjpUcioURcQUyvf
HDOfIW9kXQd/cgIzG+OkyfY2fTnVl2pIZ/F2+Zqz6zpE2xvegl/iI8lBXeuiZIDW
WGfSfwrVq8+zZsu4a01sQ/3IEYtaeeUb8TcJLc1On5EJX1BKSihmgKJ0M52ovlWS
++UsQvQUdCpV+0HUUgLGSNrXCEZ/0YQ00QPxuY9fpnTsSbxh+1jwnjq0RY3Zvcl5
cDPxmMF0eSKdTh/TjoVq7YWvtPHxYIp3SMZdFRPXGMZBHmihSZpNaz/UCunyyyDt
1sjU7blr8ygsjvCOb83H5D5I4Ivsb+4f6W61byMBARDYAeMpNjy4SrH29mcwEtDh
oIK00Q3LF1fxeL+lUyyydAgDAtERWRgHpZLoYFTifumoQU51UCghM6pkCbaJI1+K
6DXQJLyWQbb/Mvg1pArCIp8QTD1yD2wlD+KxPaYPmK6qA8jNLS/8Bbe5KebVxh8Q
zv1rrj4CgiEQXiXI9rFvWw14WrJclT9vgJNujcNW+qBbuvOle2dY6Ub7V8TZmZHG
D+G7uiHFcpqo6jU4jfoVly96Lrs6GImfF4eneeQUu0RfXGf5CoFEMzR2QaKObxD8
NbSe3ouqdfdF1PLgTrsNr/SP2MtilV8B+/uSvmIYsSJbn4VzWuE=
=3ciN
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAoACgkQTifTfDWI
cr+MOA//fToVCi0cj1SkErZ88lr+qtGrvAV8cAoa6USi5fEcj5HxT+ywm1/Cd0rq
2UJBcg68AdGgsA9RB21fm/DJwRyR6DzFXzYMuPM6490qNLNPesIUgi86LO78PhtU
ImHs8koOnTAf0V2xzMEEv6jWxhGyYbCpCQat1woFQqcsDPPXaKe/HQlrbZakdt6P
yvvjwLvkyRhU759xQ3GUj3YqVzWjlBU+XvZTipYqJScbwo8Qru9MKClnOMFPBZyt
PfhA2mU/Vyg5lzG6lorPFaEsjGdUENoscU+h8sjaPgjpTA09d+KjyuoVfqMYVa4d
4g2bwep25DqbaI73HFiclklNAn1/+xQRe3EGQK/+SWWkYSSOOgcsNQK3PM52KRV/
Rt7nAQ9iiFXZjljJ0s7NbIqHtRnshlSLXgQ1myOjL7dvTYdwF2cj5tirpHVVWXR3
KvHyONDWY8LcH9JLKZyWaUoxvnrrtMj1OClYhBV422njDQOm9YJ3Ln6ySB3jnUho
rQ7caNiThD60TieEV+xvCuKxhi5sPnPMRuF4O2qt6TEgga1ml1UTbtAUMp4XGu/H
eAGXAFBtd2wQNQ6eza1sZsdCY/hmvgMMIHaeCMsTrdo+tUTST5ylii0EgWbE8lKI
9kIf1mhPnoOIo/jjp2f5PR2Dp4nk9izJy2b30QVdRLO04PrWtPA=
=MVhZ
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHausACgkQTifTfDWI
cr+tgQ/7BCxdSGoaawSj0g0BoJmDYA/Sezc/dYG4NmYFUU4tZO+lrx794myYJ1Yh
Xq5UZLnLGwIfxFl6oA1l82a6szYysMDP4W7bbHr1IkFiZduPE96V073kzJM+C+Io
lo7DIm1J6+Ej8fnzH1Nl5gMjxR4RjqGUxJkeLKPgTlkZF9BB3Ng2IUgBWFiE0si7
UAH2qxh3n2pwhOjhrLfVx1dm5HOoZtb5jpeuvc5Mjiu654E2rwxUTZcrPOKU4R94
B1H4juGz5bmh82gX6Sri2sABHLvhBNVeATBAiInrb0ADEMVugpU1sxCTXM18T/Tz
CsGjFAiAAGgIsfZMXYtBxlF1b0CjXPJ413yLvTnQSSHzsmNqkdTjKMshyJNUoAyW
q6LKXNgC62tPHxM6squs6Qpyo17JcY8w9Up26otgbVYuQGsO8ZfyxMjh+tScbgjp
pkyWe8umB1ViWqZ562m9SU4RmYwL8+vTGIKubaHmv0TsdQM8pgjQyeE6Jmn/xpGy
hwGhZGjTaH4wUWTLR2TEiuMc6IzRFXRL6YOJGfqWD/fdLcKhkbNPgj6RMacSfWtB
JJ65GYYzzwGYgSxJUT9gRLbWz1o8Bf9ArT6CgJUZ8d9AJdvCUzmTv5s6aBge3GmG
D2NuCd8HULfg1nhGwtmGFXZsytNXx/7VS/xnVOeGh5kNolJ7MM4=
=7/Bg
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHcAkACgkQTifTfDWI
cr/+zg/8CRZFqrZP+JelLITCS1GBiQeZMWjPy+czbtxPpQcer0vzf4keUWbM8DWp
XiRxQn7w61ub/N4wjYspJz9IXdrznx3i9TMM8Eixpa/L0ka4NZovs+Y+H6/aTqCy
mz8eLOE90ju4nx6fh9ZO/MpzFZd1fwO72UCW89NaYQDp4lF3kkKAMWiMOZ3x9M4s
Azgx0F+IVu4RuVyPBNOblw6r+Tsji34PTbNFYJO3VqqtIQlxbDhU0Q/zgyVR/8Gi
lzLKeNPeVLBaBCbiW+XPD0vybkAZriuV30XF6o9NqpPSo2y9cyFmv6RbJHMOf9qZ
rLUIRu1wJhnEVIvca6cvibvS/ZjUxhDyO+fJY24uxpAUUwwzYoMzDcvEpymbKoDk
1cxrmIwYuXlx8KeVLV8wYqoBr+zR3kQhpUiatfEAdABtaUP09JiylQ+tSFISFLDU
B02xA5JtXjKBnDTf063gAatZQCq1setbsX4ArN38GVQ3c7k7PfZqFV0POZJAT8Mt
y34NFL6xNWY4w/m4xa2rxzx5GV6nPbyBcFucnYS7KNjY48MJ6NQlQz9KNjl+GArn
IKXIH9pgauWWusl5EiaRIou0Ak7j2L4uD52fYPl4igJt+EnG9yPqxrQZvqgl+L9S
h8G7PXG5jiO/6pppPAD2FK6wCUt8gp7I/2u65eVhiTrVYbino+I=
=pN6s
-----END PGP SIGNATURE-----