This commit is contained in:
Mark Randall Havens 2025-06-09 18:15:22 -05:00
parent c1c87bba09
commit 19b5f1d620
11 changed files with 1376 additions and 156 deletions

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZpYACgkQTifTfDWI
cr/avw/8DojCsKCDf3KSvPV4ihXY+4NB2HGoVy67MgWCkT5fI+yCmyCZqYt2XBnG
BB1YgDF1A3EKYnHH/IFSThAOUI41gBUHckBNTiSlWQ9c4w2oa42Dl8ybuxgYTGvG
3d2bWHxDZGpRZL1k5DqhzedH4vL+MBEG7uNG+ikb6guCLKksJzK0k3ErgyiawZkj
Ou+g9+8UAkuUk0fdvxJxLTbBgUwM48fwdXjF6FL3kliClYB6lgs+4eL9wxt1quzT
uRfrrFXiyc73YG20kd5OZZLN//bkcNGl34AJ5XkycoDWTEdP9dp/Tsrs2TAglByC
dMVbAnMHRB3GTsdBnNoMUuTnbqrIWBtQGAHf5vIPoBy04CeKwIQ8WMW/wWRGLpUP
QC5gNrzz2bLnipIDlp454yoEYHLlDqj2MfRMe7yhP9XdJQwFH9O9+aYLi/fDIBaf
xSwP2c8mqlk9gprCQyzyqTrlPPQK8vHY6Q7uQivBdD3gdVUTQaXXblLW1/erjfIm
R1BdJO4Bj18StIiSaDRO3hsH0xsGFXzdh1iXQgUn9ahl0XPHbxIR1TU+dY3CPAA0
8mwfGNxjuBHhoWjBBvun3h1XQosMNOYlnl2LikCItmhtE+4PhVsIPLiDAyD4WzhN
VicaPhGXC9XKzxNIhDkfFdLIbK0Z7x6jW7rmmmGG5sNQaTOElsQ=
=LAeK
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
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZp4ACgkQTifTfDWI
cr8rgg//QtCueUqkdRdtix4jMV9Rs8zvQxAIwKQrfQ3zcw/7Zr/Jthgk7AZrtzZa
2Fxfmlv5iReHzYR/qyO7SNpU3juR2eCWPccxjjIvo/zlh95zLIXPv73U2aB4hUrk
n4LNij3OJAr321lICh3cyD5yB7+rHWRnFr6xx5zXSmB4Yg0yyVbY/QGaVDlkE4AN
pFJTFV+7h47AlbjMkP1nAUUB4P3tWoEWw11WAZmt9sfUVVZB0ltiyLYk/YmHZfCX
mJ6da/5FFS13MAc/4rVtEpEAKuMBO54PETjx2ij/0rxCHDxjPcC9MSU1QQnk/MWK
s/Uv7w/cBijZ+yCgzt7TYzMmvPnS+bDxoFWDho26jPj8N96rxyztw8sQHkXHokPv
6ag28vU2+NTx0j3CsgkK99/ud6/KVrKUyAifUOnfFidRCNTuHZdN4O9xQ96z3JBi
KtuaEmnZTVTP0zA8zKLuooW7H4p1oeF1juBnpYSnVa/Qmv/VGVnHHuTrqPJuTaS5
47kI62Ipc3YLMZpy9uxflEoD8ZqaXGXFc3wjhBHYxppxIVJRBWmAf6s1/Nr+lKQx
TC8Atz7zRSPPFupeJn/rN1NZisJQw2GTYaovphrLlz1swQGxvbpkhZ0TG9iW9w0p
6Iv9EZltwyKfAO0lWqIe4Zak6KR4opFgLgbFJW6qenDYbL9OOkk=
=wFQ/
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
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZqYACgkQTifTfDWI
cr+sZA/8CPvqrBJ6dRSKeTdHi+uZZjeiF29H1qS1zuJN3s3QTUmmSIgAK8YF/z9K
ijEmtmx6MYTRJQ0MC/esUmKSBrIYXDEZw4BuL6wgx4REFtwIUUcqkcYMrqQqqsyT
r3MgtAY1fTh+Bc2/TlE+9+rS2Iw/l59fTuxF5aor8q6yv2w4NJG8HzZXDG1vwi8r
9eWsIhUIFXrPhODPT2bW/epqOiwrm4gtyAEwlU0mssy7jJy17k9aQ4i1JnqdWY4o
Q6pPoEVJBuNsmI03lLoNbsTdraBo7JtqUcTrRRUuiIlTAF2ho08JoaxDljM+5TQo
vONpioB8VG/iUbOc2WlELpjjGbTZcN4oTB3d7zmZDH6R/QhxxT03cey9xvWKkLiP
wS0WewSqmArQur2UOMWJGpnc1DEZG38KgAj2COu2ilFgYmQGCUtUn+9o9vgSVFLY
ZliSEjT1teLyQ0ob9RzauWnJq1iRhPJMKSjCs8dUtw+w0iW/tPiciJsDyWyHh7Nk
sD1NMrnUVRzQDGHksPI4g4sAjzT8RcKXppu+Kf1b41Oa1WFUwuhaIRJau7SICHy9
pFEv8KEpmO8f+Fg07SmaaEj76oerapz90kxBcVOKw90sOJzS+JKv1xKMrpvGzLjF
8qVUrnxK+Z1u1lgNp3CeDsD0tIPfDWsfN1AlqylbKKWLZfC/+ps=
=HSMP
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
-----END PGP SIGNATURE-----

View file

@ -33,10 +33,17 @@ 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.4" # Updated for GPG integration
SCRIPT_VERSION="1.5" # Updated for CI/CD and GPG enhancements
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"
@ -128,7 +135,7 @@ sign_file() {
return
fi
for key_id in "${GPG_KEYS[@]}"; do
gpg --armor --detach-sign --default-key "$key_id" "$file" > "$sig_file.$key_id" 2>/dev/null || warn "Failed to sign $file with key $key_id, continuing..."
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..."
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"
@ -158,6 +165,81 @@ 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 │
# ╰─────────────────────────────────────╮
@ -185,7 +267,11 @@ $(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:
@ -226,6 +312,11 @@ $(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:
@ -285,7 +376,11 @@ $(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:
@ -324,7 +419,11 @@ $(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:
@ -417,7 +516,11 @@ $(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>
@ -435,9 +538,14 @@ done)
<p>Signed with the following GPG keys:</p>
<ul>
$(for i in "${!GPG_KEYS[@]}"; do
echo " <li>${GPG_NAMES[i]} &lt;${GPG_EMAILS[i]}&gt; (Key ID: ${GPG_KEYS[i]})</li>"
echo " <li>${GPG_NAMES[i]} <${GPG_EMAILS[i]}> (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>
@ -466,15 +574,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. Peter Gaied, 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. LeCody, 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.md">GITFIELD.md</a> (Multi-repository strategy overview)</li>
<li><a href="gitfield.README.txt">gitfield.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_GITLAB.md">GitLab</a> (Multi-repo manifest)</a></li>
<li><a href="gitfieldtown.README.txt">GitField</a> README.txt</a> (Metadata directory explanation)</li>
</ul>
</section>
</main>
@ -494,7 +602,7 @@ EOF
generate_docs_css() {
info "Generating $DOCS_CSS..."
mkdir -p "$DOCS_DIR"
if [ "$PRESERVE_META" = "true" ] && [ -f "$DOCS_CSS" ]; then
if [ -f "$DOCS_CSS" ] && [ "$PRESERVE_META" = "true" ]; then
info "Preserving existing $DOCS_CSS (--preserve-meta enabled)"
return
fi
@ -573,15 +681,19 @@ $(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"
info "Generated and committed $DOCS_REPOS_JSON"
sign_file "$DOCS_REPOS_JSON"
info "Generated and committed $DOCS_REPOS_JSON"
}
generate_docs_readme() {
@ -594,7 +706,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 compatibility and enhanced discoverability.
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.
## Files
@ -614,6 +726,11 @@ 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.
@ -679,6 +796,18 @@ 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>
@ -704,7 +833,8 @@ generate_docs_sitemap() {
<priority>0.8</priority>
</url>
<url>
<loc>$GITHUB_URL/docs/.well-known/gitfield.json</loc>
<loc>$GITHUB_URL/docs/.well-known/repo.$REPO_NAME.json</loc>
<url>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
@ -722,7 +852,7 @@ generate_docs_sitemap() {
<priority>0.8</priority>
</url>
<url>
<loc>$GITHUB_URL/docs/gitfield.README.txt</loc>
<url>$GITHUB_URL/docs/gitfieldtown.README.txt</loc>
<lastmod>$TIMESTAMP</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
@ -730,7 +860,7 @@ generate_docs_sitemap() {
$(for mirror in "${MIRRORS[@]}"; do
if [[ "$mirror" != rad:* ]]; then
echo " <url>"
echo " <loc>$mirror</loc>"
echo " <loc>$mirror</loc></loc>"
echo " <lastmod>$TIMESTAMP</lastmod>"
echo " <changefreq>weekly</changefreq>"
echo " <priority>0.8</priority>"
@ -756,7 +886,7 @@ generate_docs_integrity() {
# Generated by gitfield-sync at $TIMESTAMP (v$SCRIPT_VERSION)
EOF
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
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
if [ -f "$file" ]; then
sha256sum "$file" >> "$DOCS_INTEGRITY" || warn "Failed to compute SHA-256 for $file, continuing..."
else
@ -765,21 +895,54 @@ 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"
info "Generated and committed $DOCS_INTEGRITY"
sign_file "$DOCS_INTEGRITY"
info "Generated and committed $DOCS_INTEGRITY"
}
# ╭─────────────────────────────────────╮
# │ INITIAL SETUP
# │ TRIGGER CI PIPELINE
# ╰─────────────────────────────────────╮
mkdir -p "$GITFIELD_DIR" "$WELL_KNOWN_DIR" "$DOCS_DIR" "$DOCS_WELL_KNOWN_DIR"
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')
if [ ! -f "$LOG_FILE" ]; then
echo "# Push Log for $REPO_NAME" > "$LOG_FILE"
echo "# Generated by gitfield-sync" >> "$LOG_FILE"
echo "" >> "$LOG_FILE"
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"
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 │
@ -828,6 +991,7 @@ 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.
@ -838,6 +1002,7 @@ 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.
@ -862,7 +1027,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 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.
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.
---
@ -873,11 +1038,17 @@ This multi-repository approach, bolstered by Forgejos sovereign hosting and G
- **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.
- **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).
- **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)
- **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.
@ -932,6 +1103,8 @@ 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"
@ -941,6 +1114,9 @@ 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"
@ -955,14 +1131,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" "" ""
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" "" ""
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" "" "" "" ""
# Regenerate metadata after each cycle to update sync_cycles
generate_canonical_meta
@ -978,11 +1154,13 @@ 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
@ -998,6 +1176,24 @@ 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
@ -1008,8 +1204,8 @@ done
if [ ! -d "$REPO_PATH/.git" ]; then
pushd "$REPO_PATH" >/dev/null
git init
git add .
git commit -m "Initial commit" || warn "Nothing to commit"
git add . || warn "Nothing to commit"
git commit -m "Initial commit" || warn "No changes to commit"
popd >/dev/null
fi
@ -1027,6 +1223,8 @@ 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

1046
bin/gitfield-sync-OLD5 Executable file

File diff suppressed because it is too large Load diff

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZq0ACgkQTifTfDWI
cr/i4w/6AmcnTib1O65XYtpEIi55DR0SnQP5q9pTzoLO2J32iFnbwb/bM/57tW47
YOfaU37Pwd/Dn7BND92sp9SloNO7bETbAkwgOhDDETIWmZt6EwItekx9lm03SR7/
qt07MuJRQmOfd8g0gUPr6whr28UW8ww5DR5QQCRf5PeNU/CLMIgG8UIpCsCTOwxW
qcOFuLBHy+fEN69PTdZNoSu3H8TGYt1NICQAgS/GnmUntG7ryq6+RpLSP577paPJ
acjrx2i18PORHGtGkrstXfH+8O9LmPLYfhHSzAEzdfVHp35k202BSJZOHmkiTADR
ndMyz2d6JiGDzAaaBj+JLLcQNm6kwjNCHkvd3KYTY9yESVHvDaXvdeL1KrOcQ9ga
srIbKyRIIg7JQ4/02JqGpFI4t7TKuNmfce/E1DtQGA/iNT+kiiOA527A/otwBdYk
Ud96wD53lT0KvTmOlWxMd/xv4WvjNiUibH9QG1XBa/I7HiXCwsL1HeP7ptqVZYFY
8oMOe9krnIi/86maZZFlOWT3CIoNi7DrnTuP5xpM2XsnzfBFzKh8GY4CQycP2Q00
Rc+WD+h2pvV255Y1lJGVP6mX96TGNtVVE4XcOH5B0Bvkr+TMtGsTsYn14+OcHfAT
1n0/dgpleuQ1GYMRa2BQj9O42PNG6Qw+uX5FWzc27sizRkZThMY=
=5h96
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
-----END PGP SIGNATURE-----

View file

@ -1,16 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZpoACgkQTifTfDWI
cr8qZhAAvEWlThEVvv1ABNcsPiGazyv00AcKuMvWAQKypHohvh7X/CgZ8GSmSrqu
+5O6sQED3m6Y7XopVxiPPk05hzAlMnl2f7H5adW2ZPklk8UlrxRt/bV328Mz8hcL
X51+/53zJJqor3/sNEZCEdR6GN3YkHRHX3SfUljj3hsSmBJGSBRF8m3dgYxcumeU
bBpPZ9fNUwH0PcLUI07VYEmHvRh9tiVu8S1hjAR8nPwzIBIHERmaZ49hoyeRhqk3
uq0DKujlpL5fuVEfOCYnJZSy70T2URRMkcuE+HdGSZ9lJfjo6zc5uVli0sUAr5TB
Wp37SkgB/qOHc5BPphvf4x5EbHm5d24DwoE7/y47Pi37IlJYkKawy8t7p3YiVzNv
3N/0n2m0IAE8vkADlnhf4uQqp1NYG6+XG1y1OO/S+4MGK3WS3p3L0qZkl3yLoHy8
YBOKZxPat831g1UZHudCROP22T2wnvE+wb1tZwaqaUylr4Ot9d3cOiPJjUfUH/QD
q4x97RU5kiHy76BBrrHqnHVBYZqYWr7BODk3TgtIxFou9QWRZ6oU4o6qRBXXfpvp
rtD5+R5brCmJ4o3C2sHgyGoNJ9FdJSvAkEZ3tthdIZDKsjH8TO3uxVGWm3NUK9RM
8O2Q9j3M4x80KWwW+uMx0LsAubb9j2kojfB/SjVhq08SXhgc3rY=
=MdYl
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZqoACgkQTifTfDWI
cr/Tag//crcC3c7RCDvA/MjwcjnyyZR5PW23q2b1ejJGYhAEH8I7DnGDo8gAAmGi
M9/pERci4nlcI2KHda5dnovAIK0nCGblDSKpkZgeNHXuzvKXw+Kqy9I5AiJwStQQ
ZWLSXpwBxZn5GcSg3XspwrUYUqvTxmcC/BJuOcRUkTgScQIThg5EHzHDEQ1NRG7E
O95u6miOPUg5Lchi68QGA2pjSIKOCKPkRtA9fQ/syAqdRD7Ue1PLbA9N9Yq2Kq8O
3u94oVSATA7em5e5+2Cz/G5liPRfoRquwFd97eFR51HosWyXVK1BwUu4Fl7+DqqM
wiElDkClSN8N6sLrFUHEM37BZ8TqqMJxPwuOg+NZlJFuyjdjTtnmUfzYg1L1h0XD
jM/t28h5E/p2WezYgk/v2WPxmfkgo8pCmPkLtKwC0q53tsgHbKau2XcNRJ7Cjqz2
3yX7mfJwEuPwQVQ8rJUw3k1ts5HTTxG5FsBsZ+5LAp6FUl4gmxTsNKKRruzVKKvb
cqL29HHQV1adcXOhKrFbCTrZYZaxAZP1F8G0HQOR+/bUSQRs96SIsZQa7TL1rQhB
iYMlWki8xfOT+jmnlrTvwGcuDWOdu2whZgRIDrBi4wVjeIZRjRXS/hSwT9Tstp1A
4Cb7HWeAPo7GePHR7rtVvY//TXoYLbVhQhmC1/5c3Ki/uMdUKc8=
=D0HP
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
-----END PGP SIGNATURE-----

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZqIACgkQTifTfDWI
cr9rZg//cRc9RLZhPY6deezhBFZsR/SEjvz6q44m4aTLYqBNFado//4Ero9AplSH
DwHAPfjU245WCAjrV6WxeI6LnVfpn4hC9nWHxmf3bGsNnTkpTtRPOW0oU1dRL+Oo
iU0tY3ep/sB7cUWPXXrpOm5OL9IoeZqmtqSuy6CgjomXRMm+UY62vj9wO3fXHiAC
ZYzVppBoDWkId/LPqFTVQmY1BYvd9Ln7Y9K5m1Dq6OoRZbxEPvDW71cJhlZxVInK
z4HaX5UbBD4kg1RP1Jw59fuDmxkQu7TJvtSpM7xsGH1/b1LvZVtC0jhtXENulzAk
UER2Kz05t/cSRiy4kXayE9eyeErNRpXyU7ND79sZjNZugNBTjyU6DqX4Cw61qqqj
2QXA7vaT3frW072CQ9C3gtkUT9LoyoOdqDKPeCxfOfFksaXj1TWY3JiNZOXtK9qa
Xb/8v2puRarUGexXZGTpIPo0lNgxBS0pMh9YtjrfI1TPlyENZkLzERrKjqKFQB1u
VlDOtYdK64IywzB31ZBUxu71kR9vx4f4BfTWot+KRawBgsEesl/PBsi10rbgsKL+
r+MZGRfzuiNCLppFQDUvfqsTACdz1sbCH2tTf/dugY/uvm5W+8OJbWsDXXeSdCZU
prqnsZYWL3a++A5F1m7IM6BHnb2DOsgGrtgHw+s1CiHIn3rvROs=
=gBzb
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
-----END PGP SIGNATURE-----

View file

@ -1,11 +1,3 @@
# SHA-256 Integrity Hashes for /docs Metadata Files
# Generated by gitfield-sync at 2025-06-09T22:35:36Z (v1.4)
# Generated by gitfield-sync at 2025-06-09T23:14:38Z (v1.5)
3af33327e35d33abfc590175f416f577e0a2bbe368fa7086699dbe53ab946d5c /home/mrhavens/fieldcraft/git-sigil/docs/canonical.meta
7581d0ea30cea1d56186d85a05a9ab2cc94550dcb0df1636167501382b4bdd95 /home/mrhavens/fieldcraft/git-sigil/docs/canonical.md
d5b2dde10b8a6f6121f9067f9a57ded2a66514c4058af849e676a2486272b41c /home/mrhavens/fieldcraft/git-sigil/docs/index.json
0a392228969e006a35ba6d39b897232dcdd62bdd5fa755de3ad1f8ac854fa3c8 /home/mrhavens/fieldcraft/git-sigil/docs/gitfield.json
0a392228969e006a35ba6d39b897232dcdd62bdd5fa755de3ad1f8ac854fa3c8 /home/mrhavens/fieldcraft/git-sigil/docs/.well-known/gitfield.json
c8f603efec661d39d6a3ba58ae9bffa6f2af6fcf35251eb40aa4085ca756a695 /home/mrhavens/fieldcraft/git-sigil/docs/repos.json
73993989fbe3783168533d99313c9f77c613021671fa5fa6817f3eed4743fea3 /home/mrhavens/fieldcraft/git-sigil/docs/pushed.log
f83cba3aa616c2b767e4d68c32f25be6bb61646966bd440a7185dd37eefe698e /home/mrhavens/fieldcraft/git-sigil/docs/gitfield.README.txt

View file

@ -1,16 +1,16 @@
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEif0F7T4AkoRgIfM3TifTfDWIcr8FAmhHZrIACgkQTifTfDWI
cr+MtQ/7B2+K2kQtC/qUUfEge3SYOozb5ZGJ8NQwS3RLjAgpHyi0SAFGArlwtsXR
EqWFvYVWMuOA1vXiADKHo1m0H81ej1vT1JS/F7a1WOD0K8E8HVsFVmlkuhetkwG7
bCHYD65LrLC+OrLB9MZ5AV/B1fLo3q5wwpSd76XBzd0Hok/7tIwC+wiLd8kbUCwh
KVmGEQgeBgPfK3001DOZAFKBF8LRCeVENL5twqN8HiK4rZD1fR/PfDyg95cVDx26
0HXCDeNoSfuGiiPXaeo61tT+cHOFha17wF5fsykL3OKEHhAjvtBIswvO1un1VeVy
1NuCayjWuOoY2EEseP6HBPv4IifOBOBJj1qJ0e7V4SPYnv1LZbk7OWRcFOddUIhU
9vNmqklPATbcT0bDRlYNqOpaddCrpMF7ksFoXXKI5A88b59I7H5vGvdVnmhFNb0D
zmOsS54QYRqEQER+pufuAIYfWaqbneqx79WAqrtXrQ1HraPNZtAsRQGjw5q5uW43
+QAIPQS33w5cKViDf1uJ9i/AxGkCt29iEotGHLbX4l95T30Usv0zIS0IdlQ2ARyP
YPDZO/XTpIsIdM9BXEbRxJA8/LFs2Y/fS/Th42wa0bK18xE9dDOleUX/6h7RQufr
RjYOXOTEWhbOav/57UeX56IMqlo7x8/uAzNFmjicZTylGnz7pvg=
=uZkA
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
-----END PGP SIGNATURE-----