+ New script for neocities

This commit is contained in:
shockrah 2022-01-19 16:52:46 -08:00
parent bc71787702
commit affc7ec063
2 changed files with 53 additions and 98 deletions

53
scripts/neocities.sh Normal file
View File

@ -0,0 +1,53 @@
#!/bin/bash
# This script takes care of uploading all artifacts in the public/ directory
# To neocities via its API, This script is meant to be used in CI only
# however it may occasionally be tested elsewhere
upload_file() {
file_path="$1"
uri_path="${file_path:6}"
if [ -z "$file_path" ];then
echo ERROR: upload_file Received an empty parameter exiting now >&2
return 1
fi
# Sub-routine uploads a single file for
base='https://neocities.org/api/upload'
# Curl gives us the exit code for this sub-routine's exit code
curl \
-H "Authorization: Bearer ${API_KEY}" \
-F "${uri_path}=@${file_path}"
}
feed_files() {
# 2 seconds between API hits to ease up on Neocities
SLEEP_TIME=2
if [ ! -z "$CUSTOM_SLEEP_TIME" ]; then
SLEEP_TIME=$CUSTOM_SLEEP_TIME
fi
# Main uploading section
while read -r line; do
if upload_file "$line"; then
echo Uploaded $line
else
echo Failed $line >&2
fi
sleep $SLEEP_TIME
done < /dev/stdin
}
if [ -d public/ ];then
echo Found public directory
# Upload all files that we wish to upload
find public/ -type f | grep '\.[a-z]*' | feed_files
else
echo No public directory found
exit 1
fi

View File

@ -1,98 +0,0 @@
#!/bin/bash
if [ ! -z .env ];then
# no env means we have to use the neocities var
export KEY=$NEOCITIES_KEY
else
source .env
fi
url="https://neocities.org"
site=.mirror
auth="Authorization: Bearer $KEY"
_upload_html() {
# fix this comparison cuz its busted
if [ ${1:0:1} = "" ];then
echo Path must start with ./
exit 1
fi
for f in $@;do
remote_path=${f:1}
echo curl -s -o /dev/null -w '%{http_code}' -H "auth" -F "$remote_path=@$f" $url/api/upload
curl -s -o /dev/null -w '%{http_code}' -H "$auth" -F "$remote_path=@$f" $url/api/upload
done
}
_upload_media() {
[[ "${1:0:1}" == "./" ]] && \
echo 'Path must start with ./' && \
exit 1
for f in $@;do
remote_path=${f:1}
echo curl -s -o /dev/null -w '%{http_code}' -H "auth" -F "$remote_path=@$f" $url/api/upload
curl -s -o /dev/null -w '%{http_code}' -H "$auth" -F "$remote_path=@$f" $url/api/upload
done
}
_upload_all_media() {
for file in $(find media -type f);do
echo Uploading media: $file
curl -H "$auth" -F "$file=@$file" $url/api/upload -s > /dev/null
done
}
html() {
# Total reupload of the site's html
_upload_html $(find -name '*.html')
}
roots() {
_upload_html ./*.html
}
folder() {
if [ -z $1];then
echo No folder specified > /dev/stderr
else
pushd $1 > /dev/null
_upload_html ./*.html
popd > /dev/null
fi
}
_help() {
cat <<EOF
PATHS:
Use a fake relative path as if we were in "$site"
Example: gensite -m ./media/img/some-post/image.jpg ...
Options:
h => Reuploads all the html content
r => Uploads all root html pages
f [FOLDER] => Upload all html in [FOLDER]
s [PATH] => Upload single html page with mirrord path
m [PATH] => Upload any amount of media files
M => Upload all available media
EOF
}
if [ -z $1 ];then
_help
else
pushd $site > /dev/null
while getopts 'a::Hhrf:s:m:M' opt;do
case $opt in
H) _help;;
h) _upload_html $(find -name '*.html');; # Upload all html content
r) _upload_html ./*.html;; # Upload all root html pages
f) _upload_html $2/*.html;;# Upload html in the spec'd folder
s) _upload_html $2;;# upload single html page
m) _upload_media $2;;# upload raw file
M) _upload_all_media;;
esac
done
popd > /dev/null
fi