testing
This commit is contained in:
parent
c1c87bba09
commit
19b5f1d620
11 changed files with 1376 additions and 156 deletions
|
@ -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-----
|
||||
|
|
|
@ -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-----
|
||||
|
|
|
@ -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-----
|
||||
|
|
|
@ -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]} <${GPG_EMAILS[i]}> (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,22 +895,55 @@ 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"
|
||||
}
|
||||
|
||||
# ╭─────────────────────────────────────╮
|
||||
# │ 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 platform’s unique features (e.g., GitHub’s community, GitLab’s CI/CD, Bitbucket’s integrations, Radicle’s decentralization, Forgejo’s self-hosting, Codeberg’s community-driven model, Gitea’s lightweight efficiency) enhance the project’s 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 project’s state across all platforms.
|
||||
|
||||
This multi-repository approach, bolstered by Forgejo’s 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 Forgejo’s 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 Forgejo’s 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 Radicle’s decentralized, censorship-resistant network as the primary anchor, followed by Forgejo’s sovereign, self-hosted infrastructure, Codeberg’s community-driven platform, Gitea’s lightweight efficiency, GitLab’s robust DevOps features, Bitbucket’s enterprise redundancy, and GitHub’s 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
1046
bin/gitfield-sync-OLD5
Executable file
File diff suppressed because it is too large
Load diff
|
@ -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-----
|
||||
|
|
|
@ -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-----
|
|
@ -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-----
|
||||
|
|
|
@ -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-----
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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-----
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue