Page Menu
Home
WickedGov Phorge
Search
Configure Global Search
Log In
Files
F5958489
prepare_vendor_patch.sh
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
4 KB
Referenced Files
None
Subscribers
None
prepare_vendor_patch.sh
View Options
#!/bin/bash
set
-eu
-o
pipefail
if
[
$#
-lt
2
]
;
then
echo
"USAGE:
$0
<old-git-tag> <new-git-tag> <task-id> [<git-sha-of-new-tag> <vendor-repo> <core-repo>]"
echo
"If git-sha is omitted, HEAD is used by default"
echo
"If repo args are omitted, MW_VENDOR_REPO and MW_CORE_REPO environment variables are used"
echo
"Ex:
$0
v0.19.0-a6 v0.19.0-a7 TXXXXXX HEAD ../repos/vendor ../core"
echo
"Ex:
$0
v0.19.0-a6 v0.19.0-a7 TXXXXXX HEAD"
echo
"Ex:
$0
v0.19.0-a6 v0.19.0-a7 TXXXXXX"
echo
"You have to skip OR provide both repo values on the CLI"
echo
"A specific composer install can be passed via the MW_COMPOSER env variable."
echo
"The task id refers to the associated release phab task."
exit
1
fi
waitForConfirmation
()
{
while
true
;
do
# Don't accept from a file
read
-r
-n
1
-p
"Enter y/Y to continue or n/N to exit: "
confirm
<
/dev/tty
echo
if
[
"
$confirm
"
==
"y"
]
||
[
"
$confirm
"
==
"Y"
]
;
then
break
fi
if
[
"
$confirm
"
==
"n"
]
||
[
"
$confirm
"
==
"N"
]
;
then
exit
1
fi
done
}
pwd
=
"
$PWD
"
newTagSha
=
$(
git
rev-list
-n
1
"HEAD"
)
# DEFAULT
# Check composer version
composer
=
"
${
MW_COMPOSER
:-
composer
}
"
composerVersion
=
$(
$composer
--version
2
>
/dev/null
|
cut
-d
' '
-f
3
)
readmeVersion
=
"2.8.1"
if
[
"
$composerVersion
"
!
=
"
$readmeVersion
"
]
;
then
echo
"Composer (
$composerVersion
) should be the same version as in the vendor README (
$readmeVersion
)."
exit
1
fi
if
[
$#
-gt
3
]
;
then
newTagSha
=
$4
if
[
$#
-gt
4
]
;
then
vendorRepo
=
"
$5
"
coreRepo
=
"
$6
"
fi
fi
if
[
"
${
vendorRepo
:-
foo
}
"
==
"foo"
]
;
then
if
[
"
${
MW_VENDOR_REPO
:-
foo
}
"
==
"foo"
]
;
then
echo
"Please provide vendor repo on CLI or set MW_VENDOR_REPO environment variable"
exit
1
fi
vendorRepo
=
"
$MW_VENDOR_REPO
"
fi
if
[
!
-d
"
$vendorRepo
"
]
;
then
echo
"Vendor repo
$vendorRepo
doesn't exist. Please verify and try again."
exit
1
fi
if
[
"
${
coreRepo
:-
foo
}
"
==
"foo"
]
;
then
if
[
"
${
MW_CORE_REPO
:-
foo
}
"
==
"foo"
]
;
then
echo
"Please provide core repo on CLI or set MW_CORE_REPO environment variable"
exit
1
fi
coreRepo
=
"
$MW_CORE_REPO
"
fi
if
[
!
-d
"
$coreRepo
"
]
;
then
echo
"Core repo
$coreRepo
doesn't exist. Please verify and try again."
exit
1
fi
# Generate deploy log
deployLog
=
$(
bash
./tools/gen_deploy_log.sh
"
$1
"
"
$newTagSha
"
)
echo
"{{tracked|
$3
}}
$deployLog
"
>
deploy.log.txt
echo
"
$deployLog
"
echo
"-----------------------------------------------"
echo
"^^^ These patches will be part of the new tag."
waitForConfirmation
echo
tagCount
=
$(
git
tag
-l
"
$2
"
|
wc
-l
|
xargs
)
if
[
"
$tagCount
"
!
=
"0"
]
;
then
existingTagSha
=
$(
git
rev-list
-n
1
"
$2
"
)
if
[[
"
$existingTagSha
"
!
=
"
$newTagSha
"
*
]]
;
then
echo
"Tag
$2
already exists but does not point to
$newTagSha
."
exit
1
fi
else
# Tag & push new version
echo
"Creating new tag
$2
"
git
tag
"
$2
"
"
$newTagSha
"
fi
echo
"Ready to push tag
$2
(commit
$newTagSha
) to origin"
waitForConfirmation
echo
git
push
origin
"
$2
"
echo
"Pushed new tag
$2
to origin"
echo
# Identify fixed bugs
fixedbugs
=
$(
git
log
"
$1
"
..
"
$2
"
|
(
grep
-E
"^\s*Bug:"
||
echo
""
)
|
sed
's/^[[:blank:]]*//g;'
|
sort
|
uniq
)
# --- Prepare vendor patch ---
# Update composer.json
cd
"
$vendorRepo
"
## checkout master branch and update
git
checkout
master
git
pull
origin
master
--rebase
vstring
=
$(
echo
"
$2
"
|
sed
's/v//g;'
)
sed
-i.bak
"s/wikimedia\/parsoid.*/wikimedia\/parsoid\": \"
$vstring
\",/g;"
composer.json
rm
composer.json.bak
# Wait a bit for changes to propagate to packagist
sleep
2
echo
"Ready to prepare vendor patch. Please verify that packagist has the new tag."
echo
"Visit https://packagist.org/packages/wikimedia/parsoid to verify."
waitForConfirmation
echo
# update packages
echo
"Running composer update"
$composer
update
--no-dev
echo
# Generate commit
echo
"Preparing vendor patch"
git
checkout
-b
$3
git
add
-A
wikimedia/parsoid
composer.lock
composer.json
composer
git
commit
-m
"Bump wikimedia/parsoid to
$vstring
$fixedbugs
Bug:
$3
"
changeid
=
$(
git
log
-1
|
grep
"Change-Id"
|
sed
's/.*: //g;'
)
# --- Prepare core patch that depends on the vendor patch ---
cd
"
$pwd
"
# $5 could be relative or absolute - so go back to original dir first
cd
"
$coreRepo
"
## checkout master branch and update
git
checkout
master
git
pull
origin
master
--rebase
echo
echo
"Bumping Parsoid version in core and preparing patch"
sed
-i.bak
"s/wikimedia\/parsoid.*/wikimedia\/parsoid\": \"
$vstring
\",/g;"
composer.json
rm
composer.json.bak
git
checkout
-b
$3
git
commit
composer.json
-m
"Bump wikimedia/parsoid to
$vstring
Bug:
$3
Depends-On:
$changeid
"
echo
# Add instructions
echo
"------ Followup needed ------"
echo
"* Please add contents of
$pwd
/deploy.log.txt to [[mw:Parsoid/Deployments]]"
echo
"* Please verify new patch in core repo (
$coreRepo
) and upload to gerrit for review"
echo
"* Please verify new patch in vendor repo (
$vendorRepo
) and upload to gerrit for review"
echo
"* Please +2 the uploaded core patch to ensure that when the vendor patch is +2ed, they merge together"
File Metadata
Details
Attached
Mime Type
text/x-shellscript
Expires
Sat, Oct 3, 05:49 (2 w, 4 d ago)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
62/98/0a3ca8191973dbaadabe083e5b8a
Default Alt Text
prepare_vendor_patch.sh (4 KB)
Attached To
Mode
rMWPROD MediaWiki Production
Attached
Detach File
Event Timeline
Log In to Comment