GitHub-Crud
view release on metacpan or search on metacpan
lib/GitHub/Crud.pm view on Meta::CPAN
my $s = "curl -si -X POST $pat $u $d"; # Create url
my $r = GitHub::Crud::Response::new($gitHub, $s);
my $success = $r->status == 201; # Check response code
unlink $tmpFile; # Cleanup
$gitHub->failed = $success ? undef : 1;
!$success and $gitHub->confessOnFailure and confess dump($gitHub); # Confess to any failure if so requested
$success ? 1 : undef # Return true on success
}
sub createRepositoryFromSavedToken($$;$$) # Create a repository on L<GitHub> using an access token either as supplied or saved in a file using L<savePersonalAccessToken|/savePersonalAccessToken>.\mReturns true if...
{my ($userid, $repository, $private, $accessFolderOrToken) = @_; # Userid on GitHub, the repository name, true if the repo is private, location of access token.
my $g = GitHub::Crud::new;
$g->userid = $userid;
$g->repository = $repository;
$g->private = $private;
$g->personalAccessTokenFolder = $accessFolderOrToken;
$g->loadPersonalAccessToken;
$g->confessOnFailure = 0;
$g->createRepository;
}
sub createIssue($) # Create an issue on L<GitHub>.\mRequired: L<userid|/userid>, L<repository|/repository>, L<body|/body>, L<title|/title>.\mIf the operation is successful, L<failed|/failed...
{my ($gitHub) = @_; # GitHub object
my $pat = $gitHub->patKey(1);
my $user = qm $gitHub->userid; $user or confess "userid required";
my $repo = qm $gitHub->repository; $repo or confess "repository required";
my $body = $gitHub->body; $body or confess "body required";
my $title = $gitHub->title; $title or confess "title required";
my $bran = qm $gitHub->refOrBranch(0);
my $url = url;
my $json = encodeJson({body=>$body, title=>$title}); # Issue in json
owf(my $tmpFile = temporaryFile(), $json); # Write issue definition
my $d = q( -d @).$tmpFile;
my $u = filePath($url, $user, $repo, qw(issues));
my $s = "curl -si -X POST $pat $u $d"; # Create url
my $r = GitHub::Crud::Response::new($gitHub, $s);
my $success = $r->status == 201; # Check response code
unlink $tmpFile; # Cleanup
$gitHub->failed = $success ? undef : 1;
!$success and $gitHub->confessOnFailure and # Confess to any failure if so requested
confess join "\n", dump($gitHub), $json, $s;
$success ? 1 : undef # Return true on success
}
sub createIssueFromSavedToken($$$$;$) # Create an issue on L<GitHub> using an access token as supplied or saved in a file using L<savePersonalAccessToken|/savePersonalAccessToken>.\mReturns true if the issue ...
{my ($userid, $repository, $title, $body, $accessFolderOrToken) = @_; # Userid on GitHub, repository name, issue title, issue body, location of access token.
my $g = GitHub::Crud::new;
$g->userid = $userid;
$g->repository = $repository;
$g->title = $title;
$g->body = $body;
$g->personalAccessTokenFolder = $accessFolderOrToken;
$g->loadPersonalAccessToken;
$g->confessOnFailure = 1;
$g->createIssue;
}
sub currentRepo() # Create a github object for the current repo if we are on github actions
{if (my $r = $ENV{GITHUB_REPOSITORY}) # We are on GitHub
{my ($user, $repo) = split m(/), $r, 2;
my $g = GitHub::Crud::new;
$g->userid = $user;
$g->repository = $repo;
$g->personalAccessToken = $ENV{GITHUB_TOKEN};
$g->confessOnFailure = 1;
if (!$g->personalAccessToken)
{confess "Unable to load github token for repository $r from environment variable: GITHUB_TOKEN\nSee: https://github.com/philiprbrenan/postgres/blob/main/.github/workflows/main.yml";
}
return $g;
}
undef
}
sub createIssueInCurrentRepo($$) # Create an issue in the current GitHub repo if we are running on GitHub
{my ($title, $body) = @_; # Title of issue, body of issue
if (my $g = currentRepo) # We are on GitHub
{$g->title = $title;
$g->body = $body;
$g->createIssue;
}
}
sub writeFileUsingSavedToken($$$$;$) # Write to a file on L<GitHub> using a personal access token as supplied or saved in a file. Return B<1> on success or confess to any failure.
{my ($userid, $repository, $file, $content, $accessFolderOrToken) = @_; # Userid on GitHub, repository name, file name on github, file content, location of access token.
my $g = GitHub::Crud::new;
$g->userid = $userid; $userid or confess "Userid required";
$g->repository = $repository; $repository or confess "Repository required";
$g->gitFile = $file; $file or confess "File required";
$g->personalAccessTokenFolder = $accessFolderOrToken;
$g->loadPersonalAccessToken;
$g->write($content);
}
sub writeFileFromFileUsingSavedToken($$$$;$) # Copy a file to L<github> using a personal access token as supplied or saved in a file. Return B<1> on success or confess to any failure.
{my ($userid, $repository, $file, $localFile, $accessFolderOrToken) = @_; # Userid on GitHub, repository name, file name on github, file content, location of access token.
writeFileUsingSavedToken($userid, $repository, $file,
readBinaryFile($localFile), $accessFolderOrToken);
}
sub writeFileFromCurrentRun($$) # Write to a file into the repository from the current run
{my ($target, $text) = @_; # The target file name in the repo, the text to write into this file
if (my $g = currentRepo) # We are on GitHub
{$g->gitFile = $target;
$g->write($text);
}
}
sub writeFileFromFileFromCurrentRun($) # Write a file into the repository from the current run
{my ($target) = @_; # File name both locally and in the repo
-e $target or confess "File to upload does not exist:\n$target";
if (my $g = currentRepo) # We are on GitHub
{$g->gitFile = $target;
$g->write(scalar(readFile($target)));
}
}
sub writeBinaryFileFromFileInCurrentRun($$) # Upload a binary file from the current run into the repo.
{my ($target, $source) = @_; # The target file name in the repo, the current file name in the run
( run in 0.675 second using v1.01-cache-2.11-cpan-71847e10f99 )