198 lines
5.2 KiB
Bash
Executable File
198 lines
5.2 KiB
Bash
Executable File
#!/bin/zsh
|
|
|
|
set -e
|
|
set -x
|
|
|
|
usage() {
|
|
print "Usage: ${0:t} [-r repo_url] [-d dest_dir] [-h]"
|
|
print ""
|
|
print " -r repo_url Mercurial repo URL to clone."
|
|
print " Default: ssh://pnyc@dabel.us.oracle.com//workspace/pnyc/solaris-reviews/on-sru"
|
|
print " -d dest_dir Local directory to clone into."
|
|
print " Default: ~/PycharmProjects/<repo_name>"
|
|
print " -h Show this help text."
|
|
print ""
|
|
print "The script exits if dest_dir already exists."
|
|
}
|
|
|
|
ensure_clone_identity_loaded() {
|
|
local ssh_host="$1"
|
|
local identity_file=""
|
|
local identity_pub=""
|
|
|
|
ssh_host="${ssh_host%%:*}"
|
|
|
|
identity_file=$(ssh -G "$ssh_host" 2>/dev/null | awk '/^identityfile / {print $2; exit}')
|
|
if [[ -z "$identity_file" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
identity_file=${~identity_file}
|
|
identity_pub="${identity_file}.pub"
|
|
|
|
if [[ ! -f "$identity_file" || ! -f "$identity_pub" ]]; then
|
|
return 0
|
|
fi
|
|
|
|
if ssh-add -T "$identity_pub" >/dev/null 2>&1; then
|
|
return 0
|
|
fi
|
|
|
|
print "Loading SSH identity for ${ssh_host}: ${identity_file}"
|
|
ssh-add --apple-use-keychain "$identity_file" >/dev/null 2>&1 || ssh-add "$identity_file"
|
|
}
|
|
|
|
DEFAULT_PARENT_WS='ssh://pnyc@dabel.us.oracle.com//workspace/pnyc/solaris-reviews/on-sru'
|
|
# Example repo URLs:
|
|
# ssh://pnyc@andel.us.oracle.com//workspace/pnyc/solaris-reviews/secure-integrate/userland11.4
|
|
# ssh://pnyc@andel.us.oracle.com//workspace/pnyc/solaris-reviews/userland-pipeline
|
|
# ssh://pnyc@andel.us.oracle.com//workspace/pnyc/solaris-reviews/akidr-text
|
|
# ssh://pnyc@andel.us.oracle.com//workspace/pnyc/solaris-reviews/akidr
|
|
PARENT_WS="$DEFAULT_PARENT_WS"
|
|
DEST_DIR=''
|
|
|
|
while getopts ":r:d:h" opt; do
|
|
case "$opt" in
|
|
r)
|
|
PARENT_WS="$OPTARG"
|
|
;;
|
|
d)
|
|
DEST_DIR="$OPTARG"
|
|
;;
|
|
h)
|
|
usage
|
|
exit 0
|
|
;;
|
|
:)
|
|
print -u2 "Missing argument for -$OPTARG"
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
\?)
|
|
print -u2 "Unknown option: -$OPTARG"
|
|
usage >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
shift $((OPTIND - 1))
|
|
|
|
if [[ $# -ne 0 ]]; then
|
|
print -u2 "Unexpected positional arguments: $*"
|
|
usage >&2
|
|
exit 1
|
|
fi
|
|
|
|
# remove trailing slash
|
|
PARENT_WS="${PARENT_WS%/}"
|
|
|
|
REPO=${PARENT_WS##*/} # userland11.4
|
|
|
|
if [[ -z "$DEST_DIR" ]]; then
|
|
DEST_DIR=~/PycharmProjects/${REPO}
|
|
fi
|
|
|
|
DEST_DIR=${~DEST_DIR}
|
|
DEST_DIR=${DEST_DIR:A}
|
|
|
|
if [[ -e "$DEST_DIR" ]]; then
|
|
print -u2 "Destination already exists: $DEST_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
HG_CLONE_ARGS=()
|
|
if [[ "$PARENT_WS" == ssh://* ]]; then
|
|
SSH_CLONE_HOST=${${PARENT_WS#ssh://}%%/*}
|
|
SSH_CLONE_HOST=${SSH_CLONE_HOST#*@}
|
|
ensure_clone_identity_loaded "$SSH_CLONE_HOST"
|
|
|
|
# Avoid exhausting ssh-agent identities before ssh reaches the host-specific
|
|
# IdentityFile from ~/.ssh/config (for example ~/.ssh/dabel.key).
|
|
HG_CLONE_ARGS+=(--config "ui.ssh=ssh -o BatchMode=yes -o IdentitiesOnly=yes")
|
|
fi
|
|
|
|
JENKINS_CLONE_FROM="ssh://${${PARENT_WS#ssh://}#*@}"
|
|
FOLDER_PREFIX='PetrN/'
|
|
POINT_OF_CONTACT='petr.nyc@oracle.com'
|
|
SLACK_CHANNEL='@pnyc'
|
|
|
|
# /workspace/pnyc/solaris-reviews/secure-integrate/userland11.4
|
|
SCRIPT_DIR_BASE=$(echo "$PARENT_WS" | awk '{sub(/^.*\/\//,"/"); print}')
|
|
MV=/bin/mv
|
|
RM=/bin/rm
|
|
CP=/bin/cp
|
|
CAT=/bin/cat
|
|
|
|
pwd
|
|
mkdir -p "${DEST_DIR:h}"
|
|
hg "${HG_CLONE_ARGS[@]}" clone "$PARENT_WS" "$DEST_DIR"
|
|
pwd
|
|
cd "$DEST_DIR"
|
|
pwd
|
|
|
|
source proxy off
|
|
$RM -rf venv
|
|
|
|
# this holds upgraded python-jenkins - will it work?
|
|
sed -E 's/^git.*$/git+file:\/\/\/Users\/jetpac\/PycharmProjects\/python-jenkins/' requirements.txt > /tmp/r
|
|
mv /tmp/r requirements.txt
|
|
|
|
common/tools/create_virtualenv /opt/homebrew/bin/python3.11 requirements.txt venv
|
|
|
|
echo '[alias]' >> .hg/hgrc
|
|
echo 'ci = ci -X Makefile.inc' >> .hg/hgrc
|
|
echo 'st = st -X Makefile.inc' >> .hg/hgrc
|
|
|
|
tmpmake=$(mktemp)
|
|
sed 's:PYTHON3=python3.7:PYTHON3=python3.11:g' < Makefile.inc > "$tmpmake"
|
|
$MV "$tmpmake" Makefile.inc
|
|
|
|
|
|
# set up pwd
|
|
cd "$DEST_DIR/common/etc"
|
|
$CP passwd.template passwd
|
|
|
|
# set up dev defaults
|
|
cd "$DEST_DIR/common/jobs/"
|
|
cp defaults.devel.tmpl defaults.devel.yml
|
|
cp defaults.stage.tmpl defaults.stage.yml
|
|
|
|
$CAT > defaults_devel_patch <<- CATT
|
|
9c9
|
|
< script_dir_base: "/workspace/pzahradn/jenkins/mrspatmore"
|
|
---
|
|
> script_dir_base: "${SCRIPT_DIR_BASE=}"
|
|
11a12
|
|
> pipeline_workspace: "${JENKINS_CLONE_FROM}"
|
|
14c15
|
|
< folder_prefix: "pez-" # Could be used to deploy the devel jobs to different jenkins folder
|
|
---
|
|
> folder_prefix: "${FOLDER_PREFIX}" # Could be used to deploy the devel jobs to different jenkins folder
|
|
16c17
|
|
< point_of_contact: "petr.zahradnik@oracle.com"
|
|
---
|
|
> point_of_contact: "${POINT_OF_CONTACT}"
|
|
21c22
|
|
< slack_channel: "@pzahradn"
|
|
---
|
|
> slack_channel: "${SLACK_CHANNEL}"
|
|
CATT
|
|
|
|
|
|
|
|
patch -p0 defaults.devel.yml < defaults_devel_patch
|
|
|
|
if [[ -d "$DEST_DIR/solaris/on/production" ]]; then
|
|
LINT_DIR="$DEST_DIR/solaris/on/production"
|
|
elif [[ -d "$DEST_DIR/solaris/userland/sru" ]]; then
|
|
LINT_DIR="$DEST_DIR/solaris/userland/sru"
|
|
else
|
|
print -u2 "Unable to determine lint directory under $DEST_DIR/solaris"
|
|
exit 1
|
|
fi
|
|
|
|
source proxy off
|
|
cd "$LINT_DIR"
|
|
make FAKE_DEVEL_ENV=yes lint
|