feat: publish introduction
ci/woodpecker/push/woodpecker Pipeline was successful Details

This commit is contained in:
Aravinth Manivannan 2023-01-14 13:05:45 +05:30
parent dd35e9131b
commit c98b6b13cb
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
11 changed files with 649 additions and 0 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ public/
bin/
tmp
*~
sec/

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "themes/even"]
path = themes/even
url = https://github.com/getzola/even.git

27
Makefile Normal file
View File

@ -0,0 +1,27 @@
default: ## Build the website
./scripts/spellcheck.sh --check
./scripts/zola.sh build
clean: ## Clean build assets
./scripts/zola.sh clean
ci-deploy: ## Deploy from CI/CD. Only call from within CI
@if [ "${CI}" != "woodpecker" ]; \
then echo "Only call from within CI. Will re-write your local Git configuration. To override, set export CI=woodpecker"; \
exit 1; \
fi
git config --global user.email "${CI_COMMIT_AUTHOR_EMAIL}"
git config --global user.name "${CI_COMMIT_AUTHOR}"
./scripts/zola.sh deploy librepages public "${CI_COMMIT_AUTHOR} <${CI_COMMIT_AUTHOR_EMAIL}>"
./scripts/ci.sh --init "$$GITEA_WRITE_DEPLOY_KEY"
./scripts/ci.sh --deploy ${LIBREPAGES_DEPLOY_SECRET} librepages
./scripts/ci.sh --clean
env: ## Download build dependencies and setup dev environment
./scripts/zola.sh install
help: ## Prints help for targets with comments
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
serve: ## Serve website during development
./scripts/zola.sh zola -- serve

31
config.toml Normal file
View File

@ -0,0 +1,31 @@
# The URL the site will be built for
base_url = "https://manidhayam.org"
# Whether to automatically compile all Sass files in the sass directory
compile_sass = true
theme = "even"
# Whether to build a search index to be used later on by a JavaScript library
build_search_index = true
#taxonomies = [
# # You can enable/disable RSS
# {name = "categories", feed = true},
# {name = "tags", feed = true},
#]
[markdown]
# Whether to do syntax highlighting
# Theme can be customised by setting the `highlight_theme` variable to a theme supported by Zola
highlight_code = false
[extra]
# Put all your custom variables here
# This is the default menu
even_menu = [
# {url = "$BASE_URL", name = "Home"},
# {url = "$BASE_URL/categories", name = "Categories"},
# {url = "$BASE_URL/tags", name = "Tags"},
# {url = "$BASE_URL/about", name = "About"},
]
even_title = "Manidhayam"

89
content/_index.md Normal file
View File

@ -0,0 +1,89 @@
+++
paginate_by = 5
sort_by = "date"
+++
# Utterly dejected and severely stressed out
date: 2022-06-11
Situation at home is less than ideal: my friends and family are taking
more and more unhealthy radical stances. I wanted to live a life of
writing Free Software only because I was convinced that it would bring
people together. It would be my way of serving humanity. But what good
is software going to do if the people around you are at each other's
are distrustful and utterly hateful?
What baffles me is why people in general are more prone to hatred than
love. If it is someone that one isn't familiar with, then it is possible
to brush such people off as, well, strangers. But it changes everything
when they are the ones you see everyday and deeply care about. A life
without them, which seems to be the only solution at these desperate
times, would be impossible and even unimaginable.
As mentioned, I could always choose to be alone, shun all friends and
family and chose a life of total solitude but what kind of a person
would I be if I abandon my folks at their most desperate times? Flight
is my goto solution for such cases, I avoid confrontations at all costs.
But I think, in this case flight will only make it worse: who's going to
be there to help them see better things?
A world of hatred and distrust wouldn't
survive very long. How can one live if they can't even trust their
neighbors? History is ripe with such unfortunate events and if they've
taught us anything is that, a culture motivated by hatred and distrust
will always seek a new scapegoat when the old one's disposed of. So I'm
confident that the situation will automatically resolve itself when
people are tired of living a life of total distrust.
But 50 years is too long and I don't wait that long to live in such a
world. So I'm lancing Project Manidhayam (Manidhayam is Tamil for
Humanity) in an effort to help solve some of the social issues that we
currently face.
I am in no way qualified to deal or even comment the social issues that
currently plague our little planet. But I am a
[hacker](https://en.wikipedia.org/wiki/Hacker) and I refuse to believe
that there isn't a cheap and elegant solution that ratifies most
requirements while keeping trade-offs minimal. Project Manidhayam will
look at seemingly impossible social issues, document and analyze them
from all angles without bias and suggest a way out that is based on
love, trust and respect. It will not take sides with any party invoked. It is a
pursuit of a lone (keyboard) warrior, nothing more nothing less.
Interested folks are always welcome to join the project, it only
requires that one is willing to not fall for hateful ways.
Project Manidhayam will not aim to achieve any kind of publicity for its
work and will not accept any funding. Whatever resources needed will be
sourced and provided for by its members. In very simple terms, it is a
puzzle club that is also the last refuge/resort of those of us that are
hurting and not willing to give up just yet.
Like I said, I'm not equipped or even qualified to work such issues: all
I know is that if everyone were nice and kind to each other, we would
all live in a very happy and very productive world. I only hope that I
eventually gain wisdom to deal with such things eventually.
That said, despite my best efforts bias might still leak into my
analysis and suggestions, so let me state my background and identity so
that a baseline can be established:
I am a 22 old Hindu by birth but atheist by choice aromantic asexual
Indian male hailing from an upper middle-class South Indian nuclear
family living in the third-tier South Indian city of Coimbatore who
speaks Tamil, Hindi and English in the same order of comfort but with no
strong preferences that resemble forceful imposing tendencies. I am
politically liberal and generally when it comes to matters that concern
others' lives while choosing conservative ones for myself. For instance,
I believe people should be able to consume whatever they wish (drugs,
etc.) without having to commit crimes while being an uncompromising
teetotaller myself.
I hope to live in a world where Humanity's [basic
needs](https://batsense.net/blog/03-12-2021-basic-needs/) are satisfied
and so are able to overcome materialistic needs. A world like that, I
imagine, would be one is focused on creative pursuits and
self-betterment goals. But I fully acknowledge this is only a dream and
would take centuries to achieve. So not planning/expecting a revolution
in my lifetime.

89
content/introduction.md Normal file
View File

@ -0,0 +1,89 @@
+++
date = 2022-06-11
title = "Introducing project Manidhayam"
draft = false
author = "Aravinth Manivannan"
+++
Situation at home is less than ideal: my friends and family are taking
more and more unhealthy radical stances. I wanted to live a life of
writing Free Software only because I was convinced that it would bring
people together. It would be my way of serving humanity. But what good
is software going to do if the people around you are at each other's
are distrustful and utterly hateful?
What baffles me is why people in general are more prone to hatred than
love. If it is someone that one isn't familiar with, then it is possible
to brush such people off as, well, strangers. But it changes everything
when they are the ones you see everyday and deeply care about. A life
without them, which seems to be the only solution at these desperate
times, would be impossible and even unimaginable.
As mentioned, I could always choose to be alone, shun all friends and
family and chose a life of total solitude but what kind of a person
would I be if I abandon my folks at their most desperate times? Flight
is my goto solution for such cases, I avoid confrontations at all costs.
But I think, in this case flight will only make it worse: who's going to
be there to help them see better things?
A world of hatred and distrust wouldn't
survive very long. How can one live if they can't even trust their
neighbors? History is ripe with such unfortunate events and if they've
taught us anything is that, a culture motivated by hatred and distrust
will always seek a new scapegoat when the old one's disposed of. So I'm
confident that the situation will automatically resolve itself when
people are tired of living a life of total distrust.
But 50 years is too long and I don't wait that long to live in such a
world. So I'm lancing Project Manidhayam (Manidhayam is Tamil for
Humanity) in an effort to help solve some of the social issues that we
currently face.
I am in no way qualified to deal or even comment the social issues that
currently plague our little planet. But I am a
[hacker](https://en.wikipedia.org/wiki/Hacker) and I refuse to believe
that there isn't a cheap and elegant solution that ratifies most
requirements while keeping trade-offs minimal. Project Manidhayam will
look at seemingly impossible social issues, document and analyze them
from all angles without bias and suggest a way out that is based on
love, trust and respect. It will not take sides with any party invoked. It is a
pursuit of a lone (keyboard) warrior, nothing more nothing less.
Interested folks are always welcome to join the project, it only
requires that one is willing to not fall for hateful ways.
Project Manidhayam will not aim to achieve any kind of publicity for its
work and will not accept any funding. Whatever resources needed will be
sourced and provided for by its members. In very simple terms, it is a
puzzle club that is also the last refuge/resort of those of us that are
hurting and not willing to give up just yet.
Like I said, I'm not equipped or even qualified to work such issues: all
I know is that if everyone were nice and kind to each other, we would
all live in a very happy and very productive world. I only hope that I
eventually gain wisdom to deal with such things eventually.
That said, despite my best efforts bias might still leak into my
analysis and suggestions, so let me state my background and identity so
that a baseline can be established:
I am a 22 old Hindu by birth but atheist by choice aromantic asexual
Indian male hailing from an upper middle-class South Indian nuclear
family living in the third-tier South Indian city of Coimbatore who
speaks Tamil, Hindi and English in the same order of comfort but with no
strong preferences that resemble forceful imposing tendencies. I am
politically liberal and generally when it comes to matters that concern
others' lives while choosing conservative ones for myself. For instance,
I believe people should be able to consume whatever they wish (drugs,
etc.) without having to commit crimes while being an uncompromising
teetotaller myself.
I hope to live in a world where Humanity's [basic
needs](https://batsense.net/blog/03-12-2021-basic-needs/) are satisfied
and so are able to overcome materialistic needs. A world like that, I
imagine, would be one is focused on creative pursuits and
self-betterment goals. But I fully acknowledge this is only a dream and
would take centuries to achieve. So not planning/expecting a revolution
in my lifetime.
<!-- more -->

120
scripts/ci.sh Executable file
View File

@ -0,0 +1,120 @@
#!/bin/bash
# ci.sh: Helper script to automate deployment operations on CI/CD
# Copyright © 2022 Aravinth Manivannan <realaravinth@batsense.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -xEeuo pipefail
#source $(pwd)/scripts/lib.sh
readonly SSH_ID_FILE=/tmp/ci-ssh-id
readonly SSH_REMOTE_NAME=origin-ssh
match_arg() {
if [ $1 == $2 ] || [ $1 == $3 ]
then
return 0
else
return 1
fi
}
help() {
cat << EOF
USAGE: ci.sh [SUBCOMMAND]
Helper script to automate deployment operations on CI/CD
Subcommands
-c --clean cleanup secrets, SSH key and other runtime data
-i --init <SSH_PRIVATE_KEY> initialize environment, write SSH private to file
-d --deploy <PAGES-SECRET> <TARGET BRANCH> push branch to Gitea and call Pages server
-h --help print this help menu
EOF
}
# $1: SSH private key
write_ssh(){
truncate --size 0 $SSH_ID_FILE
echo "$1" > $SSH_ID_FILE
chmod 600 $SSH_ID_FILE
}
set_ssh_remote() {
http_remote_url=$(git remote get-url origin)
remote_hostname=$(echo $http_remote_url | cut -d '/' -f 3)
repository_owner=$(echo $http_remote_url | cut -d '/' -f 4)
repository_name=$(echo $http_remote_url | cut -d '/' -f 5)
ssh_remote="git@$remote_hostname:$repository_owner/$repository_name"
ssh_remote="git@git.batsense.net:realaravinth/manidhayam.git"
git remote add $SSH_REMOTE_NAME $ssh_remote
}
clean() {
if [ -f $SSH_ID_FILE ]
then
shred $SSH_ID_FILE
rm $SSH_ID_FILE
fi
}
# $1: Pages API secret
# $2: Deployment target branch
deploy() {
if (( "$#" < 2 ))
then
help
else
git -c core.sshCommand="/usr/bin/ssh -oStrictHostKeyChecking=no -i $SSH_ID_FILE"\
push --force $SSH_REMOTE_NAME $2
curl -vv --location --request \
POST "https://deploy.batsense.net/api/v1/update"\
--header 'Content-Type: application/json' \
--data-raw "{ \"secret\": \"$1\", \"branch\": \"$2\" }"
fi
}
if (( "$#" < 1 ))
then
help
exit -1
fi
if match_arg $1 '-i' '--init'
then
if (( "$#" < 2 ))
then
help
exit -1
fi
set_ssh_remote
write_ssh "$2"
elif match_arg $1 '-c' '--clean'
then
clean
elif match_arg $1 '-d' '--deploy'
then
if (( "$#" < 3 ))
then
help
exit -1
fi
deploy $2 $3
elif match_arg $1 '-h' '--help'
then
help
else
help
fi

32
scripts/lib.sh Executable file
View File

@ -0,0 +1,32 @@
#!/bin/bash
# Copyright © 2021 Aravinth Manivannan <realaravinth@batsense.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
check_arg(){
if [ -z $1 ]
then
help
exit 1
fi
}
match_arg() {
if [ $1 == $2 ] || [ $1 == $3 ]
then
return 0
else
return 1
fi
}

98
scripts/spellcheck.sh Executable file
View File

@ -0,0 +1,98 @@
#!/bin/bash
# Used in CI workflow: install and check for spelling errors
# Copyright © 2021 Aravinth Manivannan <realaravinth@batsense.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
readonly MISSPELL_DOWNLOAD="https://github.com/client9/misspell/releases/download/v0.3.4/misspell_0.3.4_linux_64bit.tar.gz"
readonly TMP_DIR=$(pwd)/tmp
readonly PROJECT_ROOT=$(pwd)
readonly MISSPELL_TARBALL="$TMP_DIR/misspell.tar.bz2"
readonly MISSPELL="$TMP_DIR/misspell"
set -Eeuo pipefail
source $(pwd)/scripts/lib.sh
FLAGS=""
help() {
cat << EOF
spellcheck.sh: Check for spelling errors
USAGE:
spellcheck.sh <options>
OPTIONS:
c --check check for spelling erros
h --help print this help menu
w --write check and fix spelling errors
EOF
}
download() {
if [ ! -e $MISSPELL ];
then
echo "[*] Downloading misspell"
wget --quiet --output-doc=$MISSPELL_TARBALL $MISSPELL_DOWNLOAD;
cd $TMP_DIR
tar -xf $MISSPELL_TARBALL;
cd $PROJECT_ROOT
pip install codespell
else
echo "[*] Found misspell"
fi
}
spell_check_codespell() {
_check(){
codespell $FLAGS $PROJECT_ROOT/$1 #|| true
}
_check README.md
_check contents
}
spell_check_misspell() {
mkdir $TMP_DIR || true
download
_check(){
$MISSPELL $FLAGS $PROJECT_ROOT/$1
}
_check contents
_check README.md
}
check_arg $1
if match_arg $1 'w' '--write'
then
echo "[*] checking and correcting spellings"
FLAGS="-w"
spell_check_misspell
spell_check_codespell
elif match_arg $1 'c' '--check'
then
echo "[*] checking spellings"
spell_check_misspell
spell_check_codespell
elif match_arg $1 'h' '--help'
then
help
else
echo "undefined option"
help
exit 1
fi

158
scripts/zola.sh Executable file
View File

@ -0,0 +1,158 @@
#!/bin/bash
# Used in CI workflow: install Zola binary from GitHub
# Copyright © 2021 Aravinth Manivannan <realaravinth@batsense.net>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
set -euo pipefail
readonly PROJECT_ROOT=$(pwd)
readonly TARBALL=zola.tar.gz
readonly SOURCE="https://github.com/getzola/zola/releases/download/v0.15.3/zola-v0.15.3-x86_64-unknown-linux-gnu.tar.gz"
readonly BIN_PATH=tmp/bin
readonly BIN=$BIN_PATH/zola
readonly DIST=public
source $(pwd)/scripts/lib.sh
help() {
cat << EOF
zola.sh: Zola build script
USAGE:
zola.sh <options>
OPTIONS:
b build build website
c clean clean dependencies and build artifacts
d deploy deploy build to branch
h help print this help menu
i install install build dependencies
u url make urls relative
z zola invoke zola
EOF
}
download() {
if [ ! -e $BIN_PATH ];
then
mkdir -p $BIN_PATH
cd $BIN_PATH
echo "[*] Downloading Zola"
wget --quiet --output-document=$TARBALL $SOURCE
tar -xvzf $TARBALL > /dev/null
rm $TARBALL
echo "[*] Downloaded zola into $BIN"
cd $PROJECT_ROOT
fi
}
init() {
if [ ! -d $BIN_PATH ]
then
mkdir $BIN_PATH
fi
if [ ! -f $BIN ]
then
cd $BIN_PATH
download
fi
}
run() {
$BIN "${@:1}"
}
build() {
run build
}
no_absolute_url() {
sed -i 's/https:\/\/hostea.org//g' $(find public -type f | grep html)
}
clean() {
rm -rf $BIN_PATH || true
rm -rf $DIST || true
echo "[*] Workspace cleaned"
}
# $1: branch name
# $2: directory containing build assets
# $3: Author in <author-name author@example.com> format
deploy() {
cd $PROJECT_ROOT
original_branch=$(git branch --show-current)
tmp_dir=$(mktemp -d)
cp -r $2/* $tmp_dir
if [[ -z $(git ls-remote --heads origin ${1}) ]]
then
echo "[*] Creating deployment branch $1"
git checkout --orphan $1
else
echo "[*] Deployment branch $1 exists, pulling changes from remote"
git fetch origin $1
git switch $1
fi
git rm -rf .
/bin/rm -rf *
cp -r $tmp_dir/* .
git add --all
if [ $(git status --porcelain | xargs | sed '/^$/d' | wc -l) -gt 0 ];
then
echo "[*] Repository has changed, committing changes"
git commit \
--author="$3" \
--message="new deploy: $(date --iso-8601=seconds)"
fi
git checkout $original_branch
}
check_arg $1
download
if match_arg $1 'i' 'install'
then
init
elif match_arg $1 'c' 'clean'
then
clean
elif match_arg $1 'd' 'deploy'
then
check_arg $2
check_arg $3
check_arg $4
deploy $2 $3 $4
elif match_arg $1 'b' 'build'
then
build
elif match_arg $1 'h' 'help'
then
help
elif match_arg $1 'u' 'url'
then
no_absolute_url
elif match_arg $1 'z' 'zola'
then
$BIN "${@:3}"
else
echo "Error: $1 is not an option"
help
exit 1
fi
exit 0

1
themes/even Submodule

@ -0,0 +1 @@
Subproject commit cf76a75cc475b7194554115833f0699daac512d2