Skip to content
Snippets Groups Projects
Unverified Commit be9f951c authored by poly000's avatar poly000
Browse files

allow to specify repo_id and build_definition_id

parent e2566f3a
No related branches found
No related tags found
No related merge requests found
......@@ -8,8 +8,3 @@
- jq
Should work on all POSIX-compatible systems (`#!/usr/bin/env`)
## TODO
- allow to specify repo_id so we needn't to query it again
- same as the above one but for build-definition-id
#!/usr/bin/env bash
if [ $# != 5 ]
then
show_usage() {
cat <<-EOF
Usage:
pat=... $0 {org_url} {proj_name} {repo_name} {branch} {pipeline_name}
$0 --org-url {org_url} --proj-name {proj_name} [--repo-name {repo_name} | --repo-id {repo_id}] [--branch {branch}] [--pipeline-name {pipeline_name} | --build-definition-id {build_definition_id}]
Examples:
pat=... $0 https://dev.azure.com/azvse aztest aztest bensl/tmpbuild/1201 Overlake-Build-PullRequest
$0 --org-url https://dev.azure.com/azvse --proj-name aztest --repo-name aztest --branch bensl/tmpbuild/1201 --pipeline-name Overlake-Build-PullRequest
$0 --org-url https://dev.azure.com/azvse --proj-name aztest --repo-id a4822210-511f-427f-a36d-26a14c29cc89 --branch bensl/tmpbuild/1201 --build-definition-id 2
EOF
exit 1
fi
export org_url=$1
export proj_name=$2
export repo_name=$3
export branch=$4
export pipeline_name=$5
if ! [[ ${pat} ]]
then
echo please set pat as your personalAccessToken
exit 2
fi
}
function get_repo_id {
az repos list \
--org "${org_url}" \
--query '[].{name:name, id:id}' \
--proj "${proj_name}" | \
jq -r ".[] | select(.name == \"${repo_name}\") | .id"
get_repo_id() {
az repos list \
--org "${org_url}" \
--query '[].{name:name, id:id}' \
--proj "${proj_name}" | \
jq -r ".[] | select(.name == \"${repo_name}\") | .id"
}
# https://unix.stackexchange.com/a/383166
# export function to subshells for bash
typeset -fx get_repo_id
function get_pipeline_definition_id {
az pipelines build definition show \
--name "${pipeline_name}" \
--org "${org_url}" \
--proj "${proj_name}" \
--query 'id'
get_build_definition_id() {
az pipelines build definition show \
--name "${pipeline_name}" \
--org "${org_url}" \
--proj "${proj_name}" \
--query 'id'
}
typeset -fx get_pipeline_definition_id
typeset -fx get_build_definition_id
while [[ $# -gt 0 ]]; do
case "$1" in
--org-url)
org_url=$2
shift 2
;;
--proj-name)
proj_name=$2
shift 2
;;
--repo-name)
repo_name=$2
shift 2
;;
--repo-id)
repo_id=$2
shift 2
;;
--branch)
branch=$2
shift 2
;;
--pipeline-name)
pipeline_name=$2
shift 2
;;
--build-definition-id)
build_definition_id=$2
shift 2
;;
*)
show_usage
exit 1
;;
esac
done
function print_policy_list() {
az repos policy list \
--branch ${branch} \
--repository-id "${repo_id}" \
--org "${org_url}" \
--project "${proj_name}"
if [[ ! ${org_url} || ! ${proj_name} || (! ${repo_name} && ! ${repo_id}) || (! ${pipeline_name} && ! ${build_definition_id}) ]]; then
show_usage
exit 1
fi
if [[ ! "${pat}" ]]; then
echo "Please set 'pat' as your personalAccessToken"
exit 2
fi
if [[ ! ${repo_id} && ${repo_name} ]]; then
repo_id=$(get_repo_id)
echo repo_id: ${repo_id}
fi
if [[ ! ${build_definition_id} && ${pipeline_name} ]]; then
build_definition_id=$(get_build_definition_id)
echo build_definition_id: ${build_definition_id}
fi
print_policy_list() {
az repos policy list \
--branch ${branch} \
--repository-id "${repo_id}" \
--org "${org_url}" \
--project "${proj_name}"
}
function setup_build_policy() {
curl -X POST "${org_url}"/"${proj_name}"/_apis/policy/configurations?api-version=7.2-preview.1 \
-H "Authorization: Basic "$(echo -n :${pat} | base64) \
-H 'Content-Type: application/json' \
-d \
'{
"isEnabled": true,
"isBlocking": false,
"type": {
"id": "fa4e907d-c16b-4a4c-9dfa-4906e5d171dd"
},
"settings": {
"allowDownvotes": false,
"blockLastPusherVote": true,
"creatorVoteCounts": false,
"minimumApproverCount": 2,
"requireVoteOnEachIteration": true,
"requireVoteOnLastIteration": true,
"resetOnSourcePush": false,
"resetRejectionsOnSourcePush": false,
"scope": [
{
"repositoryId": "'${repo_id}'",
"refName": "refs/heads/'${branch}'",
"matchKind": "exact"
setup_build_policy() {
curl -X POST "${org_url}/${proj_name}/_apis/policy/configurations?api-version=7.2-preview.1" \
-H "Authorization: Basic $(echo -n :${pat} | base64)" \
-H 'Content-Type: application/json' \
-d '
{
"isEnabled": true,
"isBlocking": false,
"type": {
"id": "fa4e907d-c16b-4a4c-9dfa-4906e5d171dd"
},
"settings": {
"allowDownvotes": false,
"blockLastPusherVote": true,
"creatorVoteCounts": false,
"minimumApproverCount": 2,
"requireVoteOnEachIteration": true,
"requireVoteOnLastIteration": true,
"resetOnSourcePush": false,
"resetRejectionsOnSourcePush": false,
"scope": [
{
"repositoryId": "'${repo_id}'",
"refName": "refs/heads/'${branch}'",
"matchKind": "exact"
}
]
}
]
}
}'
}'
}
function setup_build_validation() {
build_definition_id=$( get_pipeline_definition_id )
az repos policy build create \
--blocking true \
--branch ${branch} \
--build-definition-id ${build_definition_id}\
--display-name "" \
--enabled true \
--manual-queue-only false \
--queue-on-source-update-only true \
--valid-duration 720 \
--repository-id ${repo_id} \
--org ${org_url} \
--project ${proj_name}
setup_build_validation() {
az repos policy build create \
--blocking true \
--branch ${branch} \
--build-definition-id ${build_definition_id} \
--display-name "" \
--enabled true \
--manual-queue-only false \
--queue-on-source-update-only true \
--valid-duration 720 \
--repository-id ${repo_id} \
--org ${org_url} \
--project ${proj_name}
}
export repo_id=$( get_repo_id )
# print_policy_list
print_policy_list
setup_build_policy
setup_build_validation
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment