forked from Ponysearch/Ponysearch
152 lines
4.1 KiB
Bash
152 lines
4.1 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
# -*- coding: utf-8; mode: sh indent-tabs-mode: nil -*-
|
||
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
||
|
|
||
|
BUILD_COMMIT_MESSAGE="Static build"
|
||
|
|
||
|
BUILT_PATHS=(
|
||
|
searx/static/themes/oscar/css
|
||
|
searx/static/themes/oscar/js
|
||
|
searx/static/themes/oscar/src/generated/pygments-logicodev.less
|
||
|
searx/static/themes/oscar/src/generated/pygments-pointhi.less
|
||
|
searx/static/themes/simple/css
|
||
|
searx/static/themes/simple/js
|
||
|
searx/static/themes/simple/src/generated/pygments.less
|
||
|
)
|
||
|
|
||
|
CURRENT_BRANCH="$(git branch --show-current)"
|
||
|
STAGED_FILES=$(git diff --name-only --cached)
|
||
|
|
||
|
git_log_current_branch() {
|
||
|
git log "heads/${CURRENT_BRANCH}" --not --exclude="${CURRENT_BRANCH}" --branches --remotes --pretty=format:"%h"
|
||
|
}
|
||
|
|
||
|
is.build.commit() {
|
||
|
COMMIT_SHA=$1
|
||
|
# check commit message
|
||
|
COMMIT_MESSAGE=$(git show -s --format=%s ${COMMIT_SHA})
|
||
|
if [ "${COMMIT_MESSAGE}" != "${BUILD_COMMIT_MESSAGE}" ]; then
|
||
|
echo "Commit message of ${COMMIT_SHA} is '${COMMIT_MESSAGE}'"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
# check all files of the commit belongs to $BUILT_PATHS
|
||
|
COMMIT_FILES=$(git diff-tree --no-commit-id --name-only -r "${COMMIT_SHA}")
|
||
|
for i in ${BUILT_PATHS[*]}; do
|
||
|
# remove files of ${BUILT_PATHS}
|
||
|
COMMIT_FILES=$(echo "${COMMIT_FILES}" | grep -v "^${i}")
|
||
|
done
|
||
|
if [ -n "${COMMIT_FILES}" ]; then
|
||
|
echo "Commit $1 contains files that were not build: ${COMMIT_FILES}"
|
||
|
return 2
|
||
|
fi
|
||
|
return 0
|
||
|
}
|
||
|
|
||
|
static.build.commit.drop() {
|
||
|
LAST_COMMIT_ID=$(git_log_current_branch | head -1)
|
||
|
|
||
|
if [ -z "${LAST_COMMIT_ID}" ]; then
|
||
|
echo "Empty branch"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
is.build.commit "${LAST_COMMIT_ID}"
|
||
|
if [ $? -ne 0 ]; then
|
||
|
return $?
|
||
|
fi
|
||
|
echo "Drop last commit ${LAST_COMMIT_ID}"
|
||
|
git reset --hard HEAD~1
|
||
|
}
|
||
|
|
||
|
static.build.commit() {
|
||
|
# check for not commited files
|
||
|
NOT_COMMITED_FILES="$(git diff --name-only)"
|
||
|
if [ -n "${NOT_COMMITED_FILES}" ]; then
|
||
|
echo "Some files are not commited:"
|
||
|
echo "${NOT_COMMITED_FILES}"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
# check for staged files
|
||
|
if [ -n "${STAGED_FILES}" ]; then
|
||
|
echo "Some files are staged:"
|
||
|
echo "${STAGED_FILES}"
|
||
|
return 1
|
||
|
fi
|
||
|
|
||
|
# drop existing commit
|
||
|
static.commit.drop
|
||
|
if [ $? -ne 0 ]; then
|
||
|
return $?
|
||
|
fi
|
||
|
|
||
|
(
|
||
|
set -e
|
||
|
# build the themes
|
||
|
make themes.all
|
||
|
|
||
|
# add build files
|
||
|
for built_path in ${BUILT_PATHS[@]}; do
|
||
|
git add -v "${built_path}"
|
||
|
done
|
||
|
|
||
|
# check for modified files that are not staged
|
||
|
if [ -n "$(git diff --name-only)" ]; then
|
||
|
echo "make themes.all has created files that are not in BUILT_PATHS"
|
||
|
return 2
|
||
|
fi
|
||
|
|
||
|
#
|
||
|
git commit -m "Static build"
|
||
|
)
|
||
|
}
|
||
|
|
||
|
static.git.restore.staged() {
|
||
|
for i in ${BUILT_PATHS[*]}; do
|
||
|
STAGED_FILES_FOR_I=$(echo "${STAGED_FILES}" | grep "^${i}")
|
||
|
if [ -n "${STAGED_FILES_FOR_I}" ]; then
|
||
|
git restore --staged ${STAGED_FILES_FOR_I}
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
static.git.restore() {
|
||
|
static.git.restore.staged
|
||
|
|
||
|
NOT_COMMITED_FILES="$(git diff --name-only)"
|
||
|
for i in ${BUILT_PATHS[*]}; do
|
||
|
NOT_COMMITED_FILES_FOR_I=$(echo "${NOT_COMMITED_FILES}" | grep "^${i}")
|
||
|
if [ -n "${NOT_COMMITED_FILES_FOR_I}" ]; then
|
||
|
git restore ${NOT_COMMITED_FILES_FOR_I}
|
||
|
fi
|
||
|
done
|
||
|
}
|
||
|
|
||
|
main() {
|
||
|
case $1 in
|
||
|
static.build.commit.drop)
|
||
|
# drop last commit if it was made by the "commit" command
|
||
|
static.build.commit.drop
|
||
|
;;
|
||
|
static.build.commit)
|
||
|
# call the "static.build.commit.drop" command,
|
||
|
# then "make themes.all"
|
||
|
# then commit the built files ($BUILT_PATHS).
|
||
|
static.build.commit
|
||
|
;;
|
||
|
static.git.restore.staged)
|
||
|
# after "git add ."
|
||
|
# remove the built files
|
||
|
# so only the source are commited
|
||
|
static.git.restore.staged
|
||
|
;;
|
||
|
static.git.restore)
|
||
|
# "git restore" of the built files.
|
||
|
static.git.restore
|
||
|
;;
|
||
|
esac
|
||
|
}
|
||
|
|
||
|
main "$@"
|