-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbundle-release.sh
executable file
·100 lines (89 loc) · 2.89 KB
/
bundle-release.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/bin/bash
# -*- coding: utf-8 -*-
# Script for creating an archive of all the necessary artefact's
# for a given (git) tagged version.
source "$(dirname $0)/functions.sh"
pre_release_check() {
local msg="$1"
shift
inform "Running pre-release check: $* " -n
$* &> "${LOGFILE}"
if [ $? -ne 0 ]; then
echo "ERROR: ${msg} ❌"
exit 1
fi
echo "✓"
return 0;
}
pre_release_checks() {
# TBD: use git signed git tags? Requires all team committers to setup GPG keys.
# pre_release_check "You must create a git tag first!" \
# git tag -v "${PROJ_VERSION}"
pre_release_check \
"Local git tag \"${RELEASE_TAG}\" \
does not exist for ${PROJ_FQNAME}" \
git rev-parse --verify --quiet "${PROJ_VERSION}"
pre_release_check \
"All tests must pass!" clojure -A:datomic-free:test
return 0;
}
make_release_jar () {
local proj_dir=$1
local jar_name=$2
local jar_dir="${proj_dir}/target"
mkdir -p "${jar_dir}"
clj -Spom
run_step "Preparing release jar" \
clj -A:datomic-free:depstar -m hf.depstar.uberjar "${jar_dir}/${jar_name}" \
&> "${LOGFILE}"
}
PROJ_ROOT="$(git rev-parse --show-toplevel)"
LOGFILE="${PROJ_ROOT}/bundle-release.log"
RELEASE_TAG="$(git describe --abbrev=0)"
if [ -z "${RELEASE_TAG}" ]; then
echo "ERROR: No git tag could be found!"
exit 1
fi
PROJ_NAME="$(proj_name)"
PROJ_VERSION="$(proj_version)"
if [ -z "$PROJ_NAME" ] || [ -z "$PROJ_VERSION" ]; then
echo "[ ❌ ] Could not determine Clojure project name and version."
exit 2
fi
BUILD_DIR="target"
PROJ_FQNAME="${PROJ_NAME}-${RELEASE_TAG}"
LOG_SORT_SCRIPT="scripts/sort-edn-log.sh"
JAR_NAME="${PROJ_NAME}-${RELEASE_TAG}-standalone.jar"
DEPLOY_JAR="${BUILD_DIR}/${PROJ_FQNAME}/${PROJ_NAME}-${RELEASE_TAG}.jar"
RELEASE_DIR="${PROJ_ROOT}/release-archives"
RELEASE_ARCHIVE="${RELEASE_DIR}/${PROJ_NAME}-${RELEASE_TAG}.tar.xz"
EXEC_CMD=$(cat <<-EOF
Example:
clojure -Sdeps \
'{:deps {com.datomic/datomic-pro {:mvn/version "0.9.5703"}
pseudoace {:local/root "target/pseudoace-0.6.0-SNAPSHOT/pseudoace-0.6.0-SNAPSHOT.jar"}}}' \
-m pseudoace.cli
EOF
)
cd "${PROJ_ROOT}"
pre_release_checks
mkdir -p "${BUILD_DIR}/${PROJ_FQNAME}"
mkdir -p "${RELEASE_DIR}"
release_file "${RELEASE_TAG}" "${LOG_SORT_SCRIPT}" "${BUILD_DIR}/${PROJ_FQNAME}/$(basename ${LOG_SORT_SCRIPT})"
make_release_jar "${PWD}" "${JAR_NAME}"
mv "$(find ./target -name ${JAR_NAME})" "${DEPLOY_JAR}"
cd "${BUILD_DIR}"
run_step "Creating release archive: ${RELEASE_ARCHIVE}" \
tar cpJf "${RELEASE_ARCHIVE}" "${PROJ_FQNAME}"
cd "${PROJ_DIR}"
rm -rf "${BUILD_DIR}"
if [ $? -eq 0 ]; then
inform "Release archive usage:"
echo " -> Copy ${RELEASE_ARCHIVE} to the target machine"
echo " -> unpack with: tar xf <path-to-archive>"
echo " -> Run using:"
echo " ${EXEC_CMD}"
else
echo "Darn, Something went wrong. please run with $SHELL -x --debug"
exit 999
fi