pronamic /
wp-pronamic-ideal
| 1 | <?php |
||
| 2 | /** |
||
| 3 | * Repositories. |
||
| 4 | * |
||
| 5 | * @author Pronamic <[email protected]> |
||
| 6 | * @copyright 2005-2020 Pronamic |
||
| 7 | * @license GPL-3.0-or-later |
||
| 8 | * @package Pronamic\WordPress\Pay |
||
| 9 | */ |
||
| 10 | |||
| 11 | $working_dir = getcwd(); |
||
| 12 | $project_dir = dirname( __DIR__ ); |
||
| 13 | $repositories_dir = $project_dir . '/repositories'; |
||
| 14 | |||
| 15 | $organisations = array( |
||
| 16 | 'pronamic' => array( |
||
| 17 | 'wp-datetime' => 'DateTime', |
||
| 18 | 'wp-money' => 'Money', |
||
| 19 | ), |
||
| 20 | 'wp-pay' => array( |
||
| 21 | 'core' => 'core', |
||
| 22 | ), |
||
| 23 | 'wp-pay-gateways' => array( |
||
| 24 | 'adyen' => 'Adyen', |
||
| 25 | 'buckaroo' => 'Buckaroo', |
||
| 26 | 'ems-e-commerce' => 'EMS e-Commerce;', |
||
| 27 | 'icepay' => 'ICEPAY', |
||
| 28 | 'ideal' => 'iDEAL', |
||
| 29 | 'ideal-advanced-v3' => 'iDEAL Advanced v3', |
||
| 30 | 'ideal-basic' => 'iDEAL Basic', |
||
| 31 | 'ing-kassa-compleet' => 'ING Kassa Compleet', |
||
| 32 | 'mollie' => 'Mollie', |
||
| 33 | 'mollie-ideal' => 'Mollie iDEAL', |
||
| 34 | 'multisafepay' => 'MultiSafepay', |
||
| 35 | 'nocks' => 'Nocks', |
||
| 36 | 'ogone' => 'Ingenico', |
||
| 37 | 'omnikassa' => 'OmniKassa', |
||
| 38 | 'omnikassa-2' => 'OmniKassa 2.0', |
||
| 39 | 'pay-nl' => 'Pay.nl', |
||
| 40 | 'sisow' => 'Sisow', |
||
| 41 | 'targetpay' => 'TargetPay', |
||
| 42 | ), |
||
| 43 | 'wp-pay-extensions' => array( |
||
| 44 | 'charitable' => 'Charitable', |
||
| 45 | 'easy-digital-downloads' => 'Easy Digital Downloads', |
||
| 46 | 'event-espresso' => 'Event Espresso', |
||
| 47 | 'event-espresso-legacy' => 'Event Espresso (legacy)', |
||
| 48 | 'formidable-forms' => 'Formidable Forms', |
||
| 49 | 'give' => 'Give', |
||
| 50 | 'gravityforms' => 'Gravity Forms', |
||
| 51 | 'memberpress' => 'MemberPress', |
||
| 52 | 'ninjaforms' => 'Ninja Forms', |
||
| 53 | 'restrict-content-pro' => 'Restrict Content Pro', |
||
| 54 | 's2member' => 's2Member', |
||
| 55 | 'woocommerce' => 'WooCommerce', |
||
| 56 | 'wp-e-commerce' => 'WP eCommerce', |
||
| 57 | ), |
||
| 58 | ); |
||
| 59 | |||
| 60 | /** |
||
| 61 | * Version update `awk` actions. |
||
| 62 | * |
||
| 63 | * @return string |
||
| 64 | */ |
||
| 65 | function version_update_awk_actions() { |
||
| 66 | global $argv; |
||
| 67 | |||
| 68 | $version_update = isset( $argv[2] ) ? $argv[2] : 'patch'; |
||
| 69 | |||
| 70 | switch ( $version_update ) { |
||
| 71 | case 'major': |
||
| 72 | return 'NR==1{printf "%s.0.0", ++$NR};'; |
||
| 73 | |||
| 74 | case 'minor': |
||
| 75 | return 'NF==2{print ++$NF}; NF>0{$(NF-1)++; $NF=0; print};'; |
||
| 76 | |||
| 77 | case 'patch': |
||
| 78 | default: |
||
| 79 | return 'NF==1{print ++$NF}; NF>1{if(length($NF+1)>length($NF))$(NF-1)++; $NF=sprintf("%0*d", length($NF), ($NF+1)%(10^length($NF))); print};'; |
||
| 80 | } |
||
| 81 | } |
||
| 82 | |||
| 83 | if ( isset( $argv[1] ) && 'changelog-plugin' === $argv[1] ) { |
||
| 84 | fwrite( fopen( __DIR__ . '/changelog-release.json', 'w+' ), '[null' ); |
||
|
0 ignored issues
–
show
Bug
introduced
by
Loading history...
|
|||
| 85 | } |
||
| 86 | |||
| 87 | foreach ( $organisations as $organisation => $repositories ) { |
||
| 88 | echo '# ', $organisation, PHP_EOL; |
||
| 89 | |||
| 90 | foreach ( $repositories as $repository => $name ) { |
||
| 91 | echo '- ', $repository, PHP_EOL; |
||
| 92 | |||
| 93 | $git_url = sprintf( |
||
| 94 | 'https://github.com/%s/%s.git', |
||
| 95 | $organisation, |
||
| 96 | $repository |
||
| 97 | ); |
||
| 98 | |||
| 99 | $git_dir = $repositories_dir . '/' . $organisation . '/' . $repository; |
||
| 100 | |||
| 101 | if ( ! is_dir( $git_dir ) ) { |
||
| 102 | echo shell_exec( 'git clone ' . $git_url . ' ' . $git_dir ); |
||
| 103 | } |
||
| 104 | |||
| 105 | // Git flow. |
||
| 106 | chdir( $git_dir ); |
||
| 107 | |||
| 108 | $command = null; |
||
| 109 | |||
| 110 | if ( isset( $argv[1] ) && 'develop' === $argv[1] ) { |
||
| 111 | $command = 'git checkout develop'; |
||
| 112 | } |
||
| 113 | |||
| 114 | if ( isset( $argv[1] ) && 'master' === $argv[1] ) { |
||
| 115 | $command = 'git checkout master'; |
||
| 116 | } |
||
| 117 | |||
| 118 | if ( isset( $argv[1] ) && 'pull' === $argv[1] ) { |
||
| 119 | $command = 'git pull'; |
||
| 120 | } |
||
| 121 | |||
| 122 | if ( isset( $argv[1] ) && 'log' === $argv[1] ) { |
||
| 123 | $command = 'git --no-pager log $(git describe --tags --abbrev=0)..HEAD --oneline'; |
||
| 124 | } |
||
| 125 | |||
| 126 | if ( isset( $argv[1] ) && 'changelog' === $argv[1] ) { |
||
| 127 | $command = ' |
||
| 128 | CURRENT_TAG=$(git describe --tags --abbrev=0); |
||
| 129 | LOG=$(git --no-pager log ${CURRENT_TAG}..HEAD --oneline); |
||
| 130 | |||
| 131 | # Exit if there are no changes in Git repository. |
||
| 132 | if [ $(echo "$LOG" | wc -l) -eq 1 ]; then |
||
| 133 | echo "Version: ${CURRENT_TAG}"; |
||
| 134 | exit; |
||
| 135 | fi; |
||
| 136 | |||
| 137 | # Set version numbers. |
||
| 138 | NEW_VERSION=$(echo "$CURRENT_TAG" | awk -F. -v OFS=. \'' . version_update_awk_actions() . '\'); |
||
| 139 | echo "Version: ${CURRENT_TAG} --> ${NEW_VERSION}"; |
||
| 140 | |||
| 141 | # Add title and log. |
||
| 142 | TITLE_LINENR=$(grep -n "## \[" CHANGELOG.md | head -2 | tail -1 | cut -d: -f1); |
||
| 143 | LOG=$(echo "$LOG" | sed \'s/^[a-z0-9]\{7\}/-/\' | sed \'s/^- Merge tag.*//\'; echo "";); |
||
| 144 | TITLE="## [${NEW_VERSION}] - $(date \'+%Y-%m-%d\')' . \PHP_EOL . '"; |
||
| 145 | ex -s -c "${TITLE_LINENR}i|${TITLE}${LOG}' . str_repeat( \PHP_EOL, 2 ) . '" -c x CHANGELOG.md; |
||
| 146 | |||
| 147 | # Update footer links. |
||
| 148 | LINK_LINENR=$(grep -n "\[unreleased\]" CHANGELOG.md | tail -1 | cut -d: -f1); |
||
| 149 | LINK="[${NEW_VERSION}]: https://github.com/' . $organisation . '/' . $repository . '/compare/${CURRENT_TAG}...${NEW_VERSION}"; |
||
| 150 | CHANGELOG=$(cat CHANGELOG.MD | sed "${LINK_LINENR}s/${CURRENT_TAG}...HEAD/${NEW_VERSION}...HEAD/" | tee CHANGELOG.md); |
||
| 151 | ex -s -c "$(( ${LINK_LINENR} + 1 ))i|${LINK}" -c x CHANGELOG.md'; |
||
| 152 | } |
||
| 153 | |||
| 154 | if ( isset( $argv[1] ) && 'changelog-plugin' === $argv[1] ) { |
||
| 155 | $command = ' |
||
| 156 | CURRENT_TAG=$(git describe --tags --abbrev=0); |
||
| 157 | NEW_VERSION=$(cat package.json | jq --raw-output \'.version\' ); |
||
| 158 | |||
| 159 | # Exit if there are no changes in Git repository. |
||
| 160 | if [[ "$CURRENT_TAG" == "$NEW_VERSION" ]]; then |
||
| 161 | echo "Version: ${CURRENT_TAG}"; |
||
| 162 | exit; |
||
| 163 | fi; |
||
| 164 | |||
| 165 | # Echo new version number. |
||
| 166 | echo "Version: ${CURRENT_TAG} --> ${NEW_VERSION}"; |
||
| 167 | |||
| 168 | # Write temporary changelog JSON. |
||
| 169 | FROM=$(( $(grep -n "## \[" CHANGELOG.md | head -2 | tail -1 | cut -d: -f1) + 1 )); |
||
| 170 | TO=$(( $(grep -n "## \[" CHANGELOG.md | head -3 | tail -1 | cut -d: -f1) - 2 )); |
||
| 171 | LOG=$(cat CHANGELOG.md | head -n $TO | tail -n +$FROM ); |
||
| 172 | echo "${LOG}" |
||
| 173 | echo ",{\"description\":\"Updated WordPress ' . ( 'pronamic' === $organisation ? null : 'pay ' ) . $name . ' library to version ${NEW_VERSION}.\",\"changes\":$(echo "${LOG}" | sed \'s/^- //\' | jq --raw-input --raw-output --slurp \'split("\\n") | .[0:-1]\')}" >> ../../../src/changelog-release.json'; |
||
| 174 | } |
||
| 175 | |||
| 176 | if ( isset( $argv[1] ) && 'update-package-version' === $argv[1] ) { |
||
| 177 | $command = ' |
||
| 178 | CURRENT_TAG=$(git describe --tags --abbrev=0); |
||
| 179 | LOG=$(git --no-pager log ${CURRENT_TAG}..HEAD --oneline); |
||
| 180 | |||
| 181 | # Exit if there are no changes in Git repository. |
||
| 182 | if [ $(echo "$LOG" | wc -l) -eq 1 ]; then |
||
| 183 | echo "Version: ${CURRENT_TAG}"; |
||
| 184 | exit; |
||
| 185 | fi; |
||
| 186 | |||
| 187 | # Set version numbers. |
||
| 188 | NEW_VERSION=$(echo "$CURRENT_TAG" | awk -F. -v OFS=. \'' . version_update_awk_actions() . '\'); |
||
| 189 | echo "Version: ${CURRENT_TAG} --> ${NEW_VERSION}"; |
||
| 190 | |||
| 191 | # Update version number. |
||
| 192 | VERSION_LINENR=$(grep -n "\"version\":" package.json | tail -1 | cut -d: -f1); |
||
| 193 | PACKAGE_JSON=$(cat package.json | sed "${VERSION_LINENR}s/\"${CURRENT_TAG}\"/\"${NEW_VERSION}\"/" | tee package.json);'; |
||
| 194 | } |
||
| 195 | |||
| 196 | if ( isset( $argv[1] ) && in_array( $argv[1], array( 'git', 'grunt', 'composer', 'npm', 'ncu' ), true ) ) { |
||
| 197 | if ( isset( $argv[2] ) ) { |
||
| 198 | $command = sprintf( '%s %s', $argv[1], $argv[2] ); |
||
| 199 | } else { |
||
| 200 | $command = sprintf( '%s', $argv[1] ); |
||
| 201 | } |
||
| 202 | } |
||
| 203 | |||
| 204 | if ( null !== $command ) { |
||
| 205 | if ( ! isset( $argv[1] ) || ( isset( $argv[1] ) && ! in_array( $argv[1], array( 'changelog', 'changelog-plugin', 'update-package-version' ), true ) ) ) { |
||
| 206 | echo $command, PHP_EOL; |
||
| 207 | } |
||
| 208 | |||
| 209 | echo shell_exec( $command ), PHP_EOL; |
||
| 210 | } |
||
| 211 | } |
||
| 212 | } |
||
| 213 | |||
| 214 | if ( isset( $argv[1] ) && 'changelog-plugin' === $argv[1] ) { |
||
| 215 | // Get release changelog items from temporary file. |
||
| 216 | $changelog_plugin = file_get_contents( __DIR__ . '/changelog-release.json' ) . ']'; |
||
| 217 | $changelog_plugin = str_replace( '\\', '\\\\', $changelog_plugin ); |
||
| 218 | $changelog_plugin = str_replace( '\\\\"', '\\"', $changelog_plugin ); |
||
| 219 | |||
| 220 | unlink( __DIR__ . '/changelog-release.json' ); |
||
| 221 | |||
| 222 | $updates = json_decode( $changelog_plugin ); |
||
| 223 | |||
| 224 | array_shift( $updates ); |
||
| 225 | |||
| 226 | // Release item. |
||
| 227 | $package = json_decode( file_get_contents( __DIR__ . '/../package.json' ) ); |
||
| 228 | |||
| 229 | $release = array( |
||
| 230 | array( |
||
| 231 | 'version' => $package->version, |
||
| 232 | 'date' => date( 'Y-m-d' ), |
||
| 233 | 'changes' => array( |
||
| 234 | 'name' => 'Changed', |
||
| 235 | 'changes' => $updates, |
||
| 236 | ), |
||
| 237 | ), |
||
| 238 | ); |
||
| 239 | |||
| 240 | // Insert in changelog after 'Unreleased' item. |
||
| 241 | $changelog = json_decode( file_get_contents( __DIR__ . '/changelog.json' ) ); |
||
| 242 | |||
| 243 | array_splice( $changelog, 1, 0, $release ); |
||
| 244 | |||
| 245 | // Use tabs for indentation. |
||
| 246 | $json = preg_replace_callback( |
||
| 247 | '/^ +/m', |
||
| 248 | function( $indentation ) { |
||
| 249 | return str_repeat( ' ', strlen( $indentation[0] ) / 4 ); |
||
| 250 | }, |
||
| 251 | json_encode( $changelog, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE ) |
||
| 252 | ); |
||
| 253 | |||
| 254 | // Write updated changelog. |
||
| 255 | fwrite( fopen( __DIR__ . '/changelog.json', 'w+' ), $json . PHP_EOL ); |
||
| 256 | } |
||
| 257 |