chore: delete unused bin scripts
This commit is contained in:
parent
419d7cac6a
commit
3d10ad02db
|
@ -1,271 +0,0 @@
|
||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Usage: git close-pull-request -t <target>
|
|
||||||
*
|
|
||||||
* Run this from a branch which has an upstream remote branch, and an associated
|
|
||||||
* pull request.
|
|
||||||
*
|
|
||||||
* The script will merge the branch into master, push master (which will
|
|
||||||
* automatically close the pull request), and delete both the local and remote
|
|
||||||
* branches.
|
|
||||||
*
|
|
||||||
* Based on a script by @christoomey. Translated into PHP.
|
|
||||||
*/
|
|
||||||
|
|
||||||
class ClosesPullRequests
|
|
||||||
{
|
|
||||||
private $targetBranch;
|
|
||||||
private $localBranch;
|
|
||||||
private $remoteBranch;
|
|
||||||
|
|
||||||
private const RUN_TYPE_COMMAND = 'command';
|
|
||||||
private const RUN_TYPE_QUERY = 'query';
|
|
||||||
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
$this->localBranch = $this->run(
|
|
||||||
'git rev-parse --abbrev-ref HEAD',
|
|
||||||
self::RUN_TYPE_QUERY
|
|
||||||
);
|
|
||||||
$this->targetBranch = $this->getTargetBranchFromArgs();
|
|
||||||
|
|
||||||
$this->remoteBranch = $this->run(
|
|
||||||
'git rev-parse --abbrev-ref --symbolic-full-name @{u}',
|
|
||||||
self::RUN_TYPE_QUERY
|
|
||||||
);
|
|
||||||
$this->remoteBranch = str_replace('origin/', '', $this->remoteBranch);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function __invoke(): void
|
|
||||||
{
|
|
||||||
$this->confirmCiStatusIsPassing();
|
|
||||||
// TODO: Check that the current branch has a tracking branch.
|
|
||||||
$this->ensureWorkingDirectoryAndIndexAreClean();
|
|
||||||
$this->fetchOrigin();
|
|
||||||
$this->ensureFeatureBranchInSync();
|
|
||||||
$this->ensureTargetBranchInSync();
|
|
||||||
$this->checkoutTargetBranch();
|
|
||||||
$this->mergeLocalBranch();
|
|
||||||
$this->pushTargetBranch();
|
|
||||||
$this->deleteRemoteBranch();
|
|
||||||
$this->deleteLocalBranch();
|
|
||||||
}
|
|
||||||
|
|
||||||
private function ensureWorkingDirectoryAndIndexAreClean(): void
|
|
||||||
{
|
|
||||||
echo 'Ensuring that index and working directory are clean...' . PHP_EOL;
|
|
||||||
|
|
||||||
$isIndexClean = $this->run('git diff --cached --exit-code', self::RUN_TYPE_COMMAND);
|
|
||||||
$isWorkingDirClean = $this->run('git diff --exit-code', self::RUN_TYPE_COMMAND);
|
|
||||||
|
|
||||||
if (!$isIndexClean || !$isWorkingDirClean) {
|
|
||||||
$this->dieWithMessage('Index or working dir not clean. Aborting.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getTargetBranchFromArgs(): string
|
|
||||||
{
|
|
||||||
if (!$targetBranchName = $this->getArg('t:', ['target:'])) {
|
|
||||||
$this->dieWithMessage('Invalid target branch specified. Aborting.');
|
|
||||||
}
|
|
||||||
|
|
||||||
return $targetBranchName;
|
|
||||||
}
|
|
||||||
|
|
||||||
private function confirmCiStatusIsPassing(): void
|
|
||||||
{
|
|
||||||
if ($this->isForce()) {
|
|
||||||
echo 'Forced. Skipping ci-status check...' . PHP_EOL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo 'Confirming ci-status on PR is green...' . PHP_EOL;
|
|
||||||
|
|
||||||
$passedCi = $this->run('gh pr checks', self::RUN_TYPE_COMMAND);
|
|
||||||
|
|
||||||
// TODO: Check if there are no CI checks. Does this return `true` as well?
|
|
||||||
if (!$passedCi) {
|
|
||||||
$this->dieWithMessage('CI pending or failed.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function fetchOrigin(): void
|
|
||||||
{
|
|
||||||
print 'Fetching origin to confirm local and remote in sync...'
|
|
||||||
. PHP_EOL;
|
|
||||||
|
|
||||||
$this->run('git fetch origin', self::RUN_TYPE_COMMAND);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function ensureTargetBranchInSync(): void
|
|
||||||
{
|
|
||||||
$this->ensureBranchInSyncWithUpstream(
|
|
||||||
$this->targetBranch,
|
|
||||||
$this->targetBranch
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function ensureFeatureBranchInSync(): void
|
|
||||||
{
|
|
||||||
$this->ensureBranchInSyncWithUpstream(
|
|
||||||
$this->localBranch,
|
|
||||||
$this->remoteBranch
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function ensureBranchInSyncWithUpstream(
|
|
||||||
string $localBranch,
|
|
||||||
string $remoteBranch
|
|
||||||
): void {
|
|
||||||
echo sprintf(
|
|
||||||
'Ensuring that %s is in sync with its upstream...',
|
|
||||||
$localBranch
|
|
||||||
) . PHP_EOL;
|
|
||||||
|
|
||||||
$localCommitTip = $this->tipCommitOfBranch($localBranch);
|
|
||||||
$remoteCommitTip = $this->tipCommitOfBranch(sprintf(
|
|
||||||
'origin/%s',
|
|
||||||
$remoteBranch
|
|
||||||
));
|
|
||||||
|
|
||||||
if ($localCommitTip != $remoteCommitTip) {
|
|
||||||
$this->dieWithMessage(sprintf(
|
|
||||||
'Branch %s was out of date, needs rebasing. Aborting.',
|
|
||||||
$localBranch
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function tipCommitOfBranch(string $branchName): string
|
|
||||||
{
|
|
||||||
return $this->run(
|
|
||||||
sprintf('git rev-parse %s', $branchName),
|
|
||||||
self::RUN_TYPE_QUERY
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function checkoutTargetBranch(): void
|
|
||||||
{
|
|
||||||
echo sprintf('Checking out %s...' . PHP_EOL, $this->targetBranch);
|
|
||||||
|
|
||||||
$this->run(
|
|
||||||
sprintf('git checkout %s', $this->targetBranch),
|
|
||||||
self::RUN_TYPE_COMMAND
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function mergeLocalBranch(): void
|
|
||||||
{
|
|
||||||
echo sprintf(
|
|
||||||
'Merging %s into %s...' . PHP_EOL,
|
|
||||||
$this->localBranch,
|
|
||||||
$this->targetBranch
|
|
||||||
);
|
|
||||||
|
|
||||||
$mergeCommand = sprintf('git merge --ff-only %s', $this->localBranch);
|
|
||||||
if (!$this->run($mergeCommand, self::RUN_TYPE_COMMAND)) {
|
|
||||||
// Switch back to the previous branch.
|
|
||||||
$this->run('git checkout -', self::RUN_TYPE_COMMAND);
|
|
||||||
|
|
||||||
$this->dieWithMessage(sprintf(
|
|
||||||
'Branch %s is not fast-forwardable.',
|
|
||||||
$this->localBranch
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public function pushTargetBranch(): void
|
|
||||||
{
|
|
||||||
print(sprintf('Pushing updated %s branch...', $this->targetBranch));
|
|
||||||
|
|
||||||
$this->run(
|
|
||||||
sprintf('git push origin %s', $this->targetBranch),
|
|
||||||
self::RUN_TYPE_COMMAND
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteRemoteBranch(): void
|
|
||||||
{
|
|
||||||
echo 'Deleting remote branch...' . PHP_EOL;
|
|
||||||
|
|
||||||
$this->run(
|
|
||||||
sprintf('git push origin :%s', $this->remoteBranch),
|
|
||||||
self::RUN_TYPE_COMMAND
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
public function deleteLocalBranch(): void
|
|
||||||
{
|
|
||||||
echo 'Deleting local branch...' . PHP_EOL;
|
|
||||||
|
|
||||||
$this->run(
|
|
||||||
sprintf('git branch -d %s', $this->localBranch),
|
|
||||||
self::RUN_TYPE_COMMAND
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function getArg(string $shortOpts, array $longOpts = []): ?string
|
|
||||||
{
|
|
||||||
if (!$values = getopt($shortOpts, $longOpts)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return current($values);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function hasArg(string $shortOpts, array $longOpts = []): bool
|
|
||||||
{
|
|
||||||
return !empty(getopt($shortOpts, $longOpts));
|
|
||||||
}
|
|
||||||
|
|
||||||
private function isForce(): bool
|
|
||||||
{
|
|
||||||
return $this->hasArg('f::', ['force::']);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Run the command.
|
|
||||||
*
|
|
||||||
* @return bool|string
|
|
||||||
* If the type is 'command', the method will return if there were any
|
|
||||||
* errors when running the command based on its return code.
|
|
||||||
*
|
|
||||||
* If the type is 'query', then the output of the command will be returned
|
|
||||||
* as a string.
|
|
||||||
*/
|
|
||||||
private function run(string $command, string $type)
|
|
||||||
{
|
|
||||||
switch ($type) {
|
|
||||||
case self::RUN_TYPE_COMMAND:
|
|
||||||
// Perform the command, hiding the original output and return
|
|
||||||
// whether or not there were errors.
|
|
||||||
@exec("$command", $output, $return);
|
|
||||||
|
|
||||||
return $return == 0;
|
|
||||||
|
|
||||||
case self::RUN_TYPE_QUERY:
|
|
||||||
// Perform the command and return the output.
|
|
||||||
return exec($command, $output);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private function dieWithMessage(string $message): void
|
|
||||||
{
|
|
||||||
echo sprintf("\e[31m%s\e[0m", $message);
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
private function exitWithWarning(string $message): void
|
|
||||||
{
|
|
||||||
echo sprintf("\e[33m%s\e[0m", $message);
|
|
||||||
|
|
||||||
exit(2);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
(new ClosesPullRequests())->__invoke();
|
|
|
@ -1,15 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
if [ "$#" -lt 1 ]; then
|
|
||||||
echo "Error: Not enough arguments."
|
|
||||||
exit l
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Create a new branch including any additional arguments.
|
|
||||||
git checkout -b "$@"
|
|
||||||
|
|
||||||
# Push the branch to origin, bypassing any Git hooks.
|
|
||||||
new_branch_name=$1
|
|
||||||
git push --no-verify -u origin "${new_branch_name}:opd-${new_branch_name}"
|
|
|
@ -1,42 +0,0 @@
|
||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
function extractBranchNamesFromInfo(string $branchInfo): array
|
|
||||||
{
|
|
||||||
$branchNames = array_map(function (string $branchInfo): string {
|
|
||||||
preg_match('/\s*((\w|-|\/)+)\s*/', $branchInfo, $matches);
|
|
||||||
|
|
||||||
return $matches[1] ?? '';
|
|
||||||
}, explode(PHP_EOL, $branchInfo));
|
|
||||||
|
|
||||||
return array_filter($branchNames);
|
|
||||||
}
|
|
||||||
|
|
||||||
function filterIgnoredBranches(array $branchNames): array
|
|
||||||
{
|
|
||||||
return array_filter($branchNames, function (string $branchName): bool {
|
|
||||||
return !in_array($branchName, ['develop', 'master', 'staging', 'production']);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
$branchInfo = shell_exec('git branch -vv | grep ": gone]"');
|
|
||||||
|
|
||||||
# Return early if there are no branches to delete.
|
|
||||||
if ($branchInfo === NULL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
$branchNames = extractBranchNamesFromInfo($branchInfo);
|
|
||||||
$filteredBranchNames = filterIgnoredBranches($branchNames);
|
|
||||||
|
|
||||||
$currentBranch = exec('git rev-parse --abbrev-ref HEAD');
|
|
||||||
|
|
||||||
foreach ($filteredBranchNames as $branchName) {
|
|
||||||
if ($branchName == $currentBranch) {
|
|
||||||
echo "Cannot delete {$branchName} as it is the current branch.";
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
echo "Deleting {$branchName}...";
|
|
||||||
exec("git branch -D ${branchName}");
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
|
|
||||||
# Usage: instead of
|
|
||||||
#
|
|
||||||
# git rebase -i master
|
|
||||||
#
|
|
||||||
# run this:
|
|
||||||
#
|
|
||||||
# git master-to-main-wrapper rebase -i %BRANCH%
|
|
||||||
#
|
|
||||||
# It will replace the literal string `%BRANCH%` with "main" (preferred) or
|
|
||||||
# "master" depending on what the current repository uses.
|
|
||||||
|
|
||||||
command=$*
|
|
||||||
branchname=$(main-or-master-branch)
|
|
||||||
replaced_commands=$(echo $command | sed "s/%BRANCH%/$branchname/g")
|
|
||||||
# sh_glob ignores special meaning of parentheses so that fancy logs like this
|
|
||||||
# work: `git master-to-main-wrapper log --format='%w(78)%s%n%+b'`
|
|
||||||
zsh -c "setopt sh_glob; git ${replaced_commands}"
|
|
26
bin/git-opr
26
bin/git-opr
|
@ -1,26 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
|
|
||||||
ensure_is_published() {
|
|
||||||
[[ ! $is_published ]] && git publish
|
|
||||||
}
|
|
||||||
|
|
||||||
is_published() {
|
|
||||||
echo $(git upstream)
|
|
||||||
}
|
|
||||||
|
|
||||||
open_or_build_pull_request() {
|
|
||||||
type gh &>/dev/null
|
|
||||||
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo "Error: gh command not found."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Load an existing PR, or create a new one.
|
|
||||||
gh pr view --web || gh pr create --assignee opdavies --web
|
|
||||||
}
|
|
||||||
|
|
||||||
ensure_is_published
|
|
||||||
open_or_build_pull_request
|
|
|
@ -1,15 +0,0 @@
|
||||||
#!/usr/bin/env php
|
|
||||||
<?php
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Usage: git publish
|
|
||||||
*/
|
|
||||||
|
|
||||||
$currentBranch = exec('git rev-parse --abbrev-ref HEAD');
|
|
||||||
|
|
||||||
if (in_array($currentBranch, ['develop', 'main', 'master', 'staging', 'production'])) {
|
|
||||||
print "Currently on ${currentBranch}. Aborting.";
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
exec("git push -u origin $currentBranch:opd-{$currentBranch}");
|
|
28
bin/git.sh
28
bin/git.sh
|
@ -1,28 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# The MIT License (MIT)
|
|
||||||
# Copyright (c) 2013 Alvin Abad
|
|
||||||
|
|
||||||
if [ $# -eq 0 ]; then
|
|
||||||
echo "Git wrapper script that can specify an ssh-key file
|
|
||||||
Usage:
|
|
||||||
git.sh -i ssh-key-file git-command
|
|
||||||
"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# remove temporary file on exit
|
|
||||||
trap 'rm -f /tmp/.git_ssh.$$' 0
|
|
||||||
|
|
||||||
if [ "$1" = "-i" ]; then
|
|
||||||
SSH_KEY=$2; shift; shift
|
|
||||||
echo "ssh -i $SSH_KEY \$@" > /tmp/.git_ssh.$$
|
|
||||||
chmod +x /tmp/.git_ssh.$$
|
|
||||||
export GIT_SSH=/tmp/.git_ssh.$$
|
|
||||||
fi
|
|
||||||
|
|
||||||
# in case the git command is repeated
|
|
||||||
[ "$1" = "git" ] && shift
|
|
||||||
|
|
||||||
# Run the git command
|
|
||||||
git "$@"
|
|
|
@ -1,8 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [[ -f "vendor/bin/pest" ]]; then
|
|
||||||
echo "pest"
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "phpunit"
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Use fzf to select a project to open with tmuxinator.
|
|
||||||
|
|
||||||
set -euo pipefail
|
|
||||||
|
|
||||||
tmuxinator list -n | tail -n +2 | fzf | xargs tmuxinator start
|
|
|
@ -1,11 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
if [ "$1" ] && [ "$2" ]; then
|
|
||||||
while true
|
|
||||||
do
|
|
||||||
inotifywait --event modify --exclude ".null-ls_*" --recursive $1 2> /dev/null
|
|
||||||
$2
|
|
||||||
done
|
|
||||||
else
|
|
||||||
echo "usage: watch-changes <file> <command>"
|
|
||||||
fi
|
|
Loading…
Reference in a new issue