This commit is contained in:
parent
cb205c88df
commit
79925af7d3
2 changed files with 170 additions and 127 deletions
220
.checks/pre-push
220
.checks/pre-push
|
|
@ -1,126 +1,126 @@
|
|||
# #!/usr/bin/env bash
|
||||
# # PRE-PUSH
|
||||
# # Check the repo for dependency, language, vulnerability, and build issues
|
||||
#!/usr/bin/env bash
|
||||
# PRE-PUSH
|
||||
# Check the repo for dependency, language, vulnerability, and build issues
|
||||
|
||||
# set -euo pipefail
|
||||
set -euo pipefail
|
||||
|
||||
# # Setting log colours
|
||||
# RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||||
# Setting log colours
|
||||
RED='\033[0;31m'; GREEN='\033[0;32m'; YELLOW='\033[1;33m'; NC='\033[0m'
|
||||
|
||||
# echo -e "${GREEN}Running pre-push checks...${NC}"
|
||||
echo -e "${GREEN}Running pre-push checks...${NC}"
|
||||
|
||||
# # Start time tracking
|
||||
# START_TIME=$(date +%s)
|
||||
# Start time tracking
|
||||
START_TIME=$(date +%s)
|
||||
|
||||
# # Setting paths
|
||||
# REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
||||
# CONTENT_DIR="$REPO_ROOT/content"
|
||||
# ZENSICAL_CFG_PATH="$REPO_ROOT/zensical.toml"
|
||||
# SITE_DIR="$REPO_ROOT/deploy"
|
||||
# LOG_DIR="$REPO_ROOT/.checks/logs"
|
||||
# mkdir -p "$LOG_DIR"
|
||||
# Setting paths
|
||||
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
|
||||
CONTENT_DIR="$REPO_ROOT/content"
|
||||
ZENSICAL_CFG_PATH="$REPO_ROOT/zensical.toml"
|
||||
SITE_DIR="$REPO_ROOT/deploy"
|
||||
LOG_DIR="$REPO_ROOT/.checks/logs"
|
||||
mkdir -p "$LOG_DIR"
|
||||
|
||||
# # Cleanup old logs
|
||||
# rm -f "$LOG_DIR/*"
|
||||
# Cleanup old logs
|
||||
rm -f "$LOG_DIR/*"
|
||||
|
||||
# # Cleanup function
|
||||
# cleanup() {
|
||||
# trap - EXIT INT TERM
|
||||
# if [[ -n "${SERVER_PID:-}" ]] && ps -p "$SERVER_PID" >/dev/null 2>&1; then
|
||||
# kill "$SERVER_PID" >/dev/null 2>&1 || true
|
||||
# for _ in {1..30}; do ps -p "$SERVER_PID" >/dev/null 2>&1 || break; sleep 0.1; done
|
||||
# fi
|
||||
# }
|
||||
# trap cleanup EXIT INT TERM
|
||||
# Cleanup function
|
||||
cleanup() {
|
||||
trap - EXIT INT TERM
|
||||
if [[ -n "${SERVER_PID:-}" ]] && ps -p "$SERVER_PID" >/dev/null 2>&1; then
|
||||
kill "$SERVER_PID" >/dev/null 2>&1 || true
|
||||
for _ in {1..30}; do ps -p "$SERVER_PID" >/dev/null 2>&1 || break; sleep 0.1; done
|
||||
fi
|
||||
}
|
||||
trap cleanup EXIT INT TERM
|
||||
|
||||
# # Function to run commands and log output
|
||||
# run_command() {
|
||||
# local cmd="$1"
|
||||
# local logfile="$2"
|
||||
# echo -e "${GREEN}Running ${cmd}...${NC}"
|
||||
# $cmd >"$logfile" 2>&1 || { echo -e "${RED}${cmd} failed. See $logfile${NC}"; exit 1; }
|
||||
# }
|
||||
# Function to run commands and log output
|
||||
run_command() {
|
||||
local cmd="$1"
|
||||
local logfile="$2"
|
||||
echo -e "${GREEN}Running ${cmd}...${NC}"
|
||||
$cmd >"$logfile" 2>&1 || { echo -e "${RED}${cmd} failed. See $logfile${NC}"; exit 1; }
|
||||
}
|
||||
|
||||
# # Running independent checks in parallel
|
||||
# {
|
||||
# # Trivy check for vulnerabilities
|
||||
# if command -v trivy &>/dev/null; then
|
||||
# run_command "trivy fs . --exit-code 1 --severity CRITICAL,HIGH,MEDIUM,LOW,UNKNOWN --no-progress --scanners vuln" "$LOG_DIR/trivy.log"
|
||||
# else
|
||||
# echo -e "${YELLOW}Trivy not installed. Skipping vulnerability scan.${NC}"
|
||||
# fi
|
||||
# } &
|
||||
# Running independent checks in parallel
|
||||
{
|
||||
# Trivy check for vulnerabilities
|
||||
if command -v trivy &>/dev/null; then
|
||||
run_command "trivy fs . --exit-code 1 --severity CRITICAL,HIGH,MEDIUM,LOW,UNKNOWN --no-progress --scanners vuln" "$LOG_DIR/trivy.log"
|
||||
else
|
||||
echo -e "${YELLOW}Trivy not installed. Skipping vulnerability scan.${NC}"
|
||||
fi
|
||||
} &
|
||||
|
||||
# {
|
||||
# # Trufflehog check for passwords and secrets
|
||||
# if command -v trufflehog &>/dev/null && command -v jq &>/dev/null; then
|
||||
# TMPF="$(mktemp)"
|
||||
# trufflehog filesystem . --json >"$TMPF" 2>"$LOG_DIR/trufflehog.log" || true
|
||||
# if jq -e 'select(.verified==true)' "$TMPF" | grep -q .; then
|
||||
# cp "$TMPF" "$LOG_DIR/trufflehog-findings.json"
|
||||
# echo -e "${RED}Verified secrets found. See $LOG_DIR/trufflehog-findings.json${NC}"
|
||||
# rm -f "$TMPF"; exit 1
|
||||
# fi
|
||||
# rm -f "$TMPF"
|
||||
# else
|
||||
# echo -e "${YELLOW}TruffleHog or jq not installed. Skipping secrets scan.${NC}"
|
||||
# fi
|
||||
# } &
|
||||
{
|
||||
# Trufflehog check for passwords and secrets
|
||||
if command -v trufflehog &>/dev/null && command -v jq &>/dev/null; then
|
||||
TMPF="$(mktemp)"
|
||||
trufflehog filesystem . --json >"$TMPF" 2>"$LOG_DIR/trufflehog.log" || true
|
||||
if jq -e 'select(.verified==true)' "$TMPF" | grep -q .; then
|
||||
cp "$TMPF" "$LOG_DIR/trufflehog-findings.json"
|
||||
echo -e "${RED}Verified secrets found. See $LOG_DIR/trufflehog-findings.json${NC}"
|
||||
rm -f "$TMPF"; exit 1
|
||||
fi
|
||||
rm -f "$TMPF"
|
||||
else
|
||||
echo -e "${YELLOW}TruffleHog or jq not installed. Skipping secrets scan.${NC}"
|
||||
fi
|
||||
} &
|
||||
|
||||
# {
|
||||
# # Dependabot dependency vulnerability check
|
||||
# if command -v npm &>/dev/null && [[ -f package.json ]]; then
|
||||
# run_command "npm audit --audit-level=high" "$LOG_DIR/npm-audit.log"
|
||||
# elif command -v pip &>/dev/null && [[ -f requirements.txt ]]; then
|
||||
# run_command "pip list --outdated" "$LOG_DIR/pip-outdated.log"
|
||||
# if grep -q "upgradable" "$LOG_DIR/pip-outdated.log"; then
|
||||
# echo -e "${YELLOW}Outdated Python dependencies found. See $LOG_DIR/pip-outdated.log${NC}"
|
||||
# fi
|
||||
# else
|
||||
# echo -e "${YELLOW}No dependency management files found. Skipping dependency checks.${NC}"
|
||||
# fi
|
||||
# } &
|
||||
{
|
||||
# Dependabot dependency vulnerability check
|
||||
if command -v npm &>/dev/null && [[ -f package.json ]]; then
|
||||
run_command "npm audit --audit-level=high" "$LOG_DIR/npm-audit.log"
|
||||
elif command -v pip &>/dev/null && [[ -f requirements.txt ]]; then
|
||||
run_command "pip list --outdated" "$LOG_DIR/pip-outdated.log"
|
||||
if grep -q "upgradable" "$LOG_DIR/pip-outdated.log"; then
|
||||
echo -e "${YELLOW}Outdated Python dependencies found. See $LOG_DIR/pip-outdated.log${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}No dependency management files found. Skipping dependency checks.${NC}"
|
||||
fi
|
||||
} &
|
||||
|
||||
# # Wait for all background jobs to finish
|
||||
# wait
|
||||
# Wait for all background jobs to finish
|
||||
wait
|
||||
|
||||
# # Lint markdown files using markdownlint-cli2
|
||||
# if command -v markdownlint-cli2 &>/dev/null; then
|
||||
# MD_FILES="$(git diff HEAD~1 HEAD --name-only --diff-filter=ACM | grep -E '\.md$' || true)"
|
||||
# if [[ -n "$MD_FILES" ]]; then
|
||||
# echo -e "${GREEN}Running markdownlint...${NC}"
|
||||
# echo "$MD_FILES" | xargs markdownlint-cli2 >"$LOG_DIR/markdownlint.log" 2>&1 || {
|
||||
# echo -e "${RED}markdownlint-cli2 failed. See $LOG_DIR/markdownlint.log${NC}"; exit 1;
|
||||
# }
|
||||
# else
|
||||
# echo -e "${YELLOW}No committed Markdown files found. Skipping markdown check.${NC}"
|
||||
# fi
|
||||
# else
|
||||
# echo -e "${YELLOW}markdownlint-cli2 not installed. Skipping markdown check.${NC}"
|
||||
# fi
|
||||
# Lint markdown files using markdownlint-cli2
|
||||
if command -v markdownlint-cli2 &>/dev/null; then
|
||||
MD_FILES="$(git diff HEAD~1 HEAD --name-only --diff-filter=ACM | grep -E '\.md$' || true)"
|
||||
if [[ -n "$MD_FILES" ]]; then
|
||||
echo -e "${GREEN}Running markdownlint...${NC}"
|
||||
echo "$MD_FILES" | xargs markdownlint-cli2 >"$LOG_DIR/markdownlint.log" 2>&1 || {
|
||||
echo -e "${RED}markdownlint-cli2 failed. See $LOG_DIR/markdownlint.log${NC}"; exit 1;
|
||||
}
|
||||
else
|
||||
echo -e "${YELLOW}No committed Markdown files found. Skipping markdown check.${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}markdownlint-cli2 not installed. Skipping markdown check.${NC}"
|
||||
fi
|
||||
|
||||
# # Lint language using Vale
|
||||
# if command -v vale &>/dev/null && [[ -f "$REPO_ROOT/.vale.ini" ]]; then
|
||||
# echo -e "${GREEN}Running Vale...${NC}"
|
||||
# VALE_FILES="$(git diff HEAD~1 HEAD --name-only --diff-filter=ACM | grep -E '\.md$' || true)"
|
||||
# if [[ -n "$VALE_FILES" ]]; then
|
||||
# echo "$VALE_FILES" | xargs vale >"$LOG_DIR/vale.log" 2>&1 || {
|
||||
# echo -e "${RED}Vale issues. See $LOG_DIR/vale.log${NC}"; exit 1;
|
||||
# }
|
||||
# else
|
||||
# echo -e "${YELLOW}No committed Markdown files found. Skipping Vale check.${NC}"
|
||||
# fi
|
||||
# else
|
||||
# echo -e "${YELLOW}Vale not installed or .vale.ini missing. Skipping Vale.${NC}"
|
||||
# fi
|
||||
# Lint language using Vale
|
||||
if command -v vale &>/dev/null && [[ -f "$REPO_ROOT/.vale.ini" ]]; then
|
||||
echo -e "${GREEN}Running Vale...${NC}"
|
||||
VALE_FILES="$(git diff HEAD~1 HEAD --name-only --diff-filter=ACM | grep -E '\.md$' || true)"
|
||||
if [[ -n "$VALE_FILES" ]]; then
|
||||
echo "$VALE_FILES" | xargs vale >"$LOG_DIR/vale.log" 2>&1 || {
|
||||
echo -e "${RED}Vale issues. See $LOG_DIR/vale.log${NC}"; exit 1;
|
||||
}
|
||||
else
|
||||
echo -e "${YELLOW}No committed Markdown files found. Skipping Vale check.${NC}"
|
||||
fi
|
||||
else
|
||||
echo -e "${YELLOW}Vale not installed or .vale.ini missing. Skipping Vale.${NC}"
|
||||
fi
|
||||
|
||||
# # Build the site using Zensical to check for build errors
|
||||
# if ! command -v zensical >/dev/null 2>&1; then
|
||||
# echo -e "${RED}Zensical not installed; cannot build docs.${NC}"; exit 1
|
||||
# fi
|
||||
# run_command "zensical build --clean" "$LOG_DIR/zensical-build.log"
|
||||
# Build the site using Zensical to check for build errors
|
||||
if ! command -v zensical >/dev/null 2>&1; then
|
||||
echo -e "${RED}Zensical not installed; cannot build docs.${NC}"; exit 1
|
||||
fi
|
||||
run_command "zensical build --clean" "$LOG_DIR/zensical-build.log"
|
||||
|
||||
# # End time tracking and calculate duration
|
||||
# END_TIME=$(date +%s)
|
||||
# DURATION=$((END_TIME - START_TIME))
|
||||
# echo -e "${GREEN}Push checks completed in $DURATION seconds.${NC}"
|
||||
# End time tracking and calculate duration
|
||||
END_TIME=$(date +%s)
|
||||
DURATION=$((END_TIME - START_TIME))
|
||||
echo -e "${GREEN}Push checks completed in $DURATION seconds.${NC}"
|
||||
|
|
|
|||
|
|
@ -1 +1,44 @@
|
|||
Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?
|
||||
---
|
||||
description: words, visuals, technical.
|
||||
extra_css:
|
||||
- assets/css/index.css
|
||||
extra_js:
|
||||
- assets/js/gsap/gsap.min.js
|
||||
- assets/js/gsap/ScrollTrigger.min.js
|
||||
- assets/js/index.js
|
||||
hide:
|
||||
- toc
|
||||
- navigation
|
||||
search:
|
||||
exclude: true
|
||||
template: "chapter.html"
|
||||
title: Home
|
||||
---
|
||||
|
||||
<!-- markdownlint-disable MD033 -->
|
||||
<!-- markdownlint-disable MD013 -->
|
||||
|
||||
<div class="hero pin-section">
|
||||
<div class="content">
|
||||
<ul class="list">
|
||||
<li></li>
|
||||
<li>words</li>
|
||||
<li>visuals</li>
|
||||
<li>technical</li>
|
||||
</ul>
|
||||
<div class="faces">
|
||||
<div class="slide center">
|
||||
<img src="assets/media/face-1276x1276.webp" alt="gwabini" />
|
||||
</div>
|
||||
<div class="slide center">
|
||||
<img src="assets/media/words-face-1276x1276.webp" alt="boya benyathi" />
|
||||
</div>
|
||||
<div class="slide center">
|
||||
<img src="assets/media/visuals-face-1276x1276.webp" alt="bele elide" />
|
||||
</div>
|
||||
<div class="slide center">
|
||||
<img src="assets/media/technical-face-1276x1276.webp" alt="our pride" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue