composer require bbaga/buildkite-phpPsrHttpClientClientInterface implementation is available in the bbaga/buildkite-php-guzzle-client package.
use bbagaBuildkiteApiApiRestApi;
/** @var PsrHttpClientClientInterface $client */
$client = new MyHttpClient();
$api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN');use bbagaBuildkiteApiApiGraphQLApi;
/** @var PsrHttpClientClientInterface $client */
$client = new MyHttpClient();
$api = new GraphQLApi($client, 'MY_BUILDKITE_API_TOKEN');use bbagaBuildkiteApiApiGraphQLApi;
use bbagaBuildkiteApiApiGuzzleClient;
$query = '
query example($slug: ID!, $first: Int){
viewer { user { name } }
organization(slug: $slug) {
pipelines(first: $first) {
edges {
node {
id
slug
}
}
}
}
}';
$variables = json_encode(['slug' => 'my-org', 'first' => 5]);
$client = new GuzzleClient();
$api = new GraphQLApi($client, 'MY_BUILDKITE_API_TOKEN');
$api->getResponseBody($api->post($query, $variables));use bbagaBuildkiteApiApiGuzzleClient;
use bbagaBuildkiteApiApiRestFluent;
use bbagaBuildkiteApiApiRestApi;
$client = new GuzzleClient();
$api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN');
/** Getting all the organizations that are visible with the TOKEN */
/** @var FluentOrganization[] $organizations */
$organizations = (new FluentOrganizations($api))->get();
/** @var FluentOrganization $organization */
$organization = $organizations[0];
/** @var FluentPipeline $pipelines */
$pipelines = $organization->getPipelines();
/** @var FluentPipeline $pipeline */
$pipeline = $pipelines[0];
/** @var FluentBuild[] $builds */
$builds = $pipeline->getBuilds();
/** @var FluentBuild $build */
$build = $builds[0];
/** @var FluentJob[] $jobs */
$jobs = $build->getJobs();
/** @var FluentEmoji[] $emojis */
$emojis = $organizations[0]->getEmojis();
/** @var FluentAgent[] $emojis */
$agents = $organizations[0]->getAgents();Fetching data for a specific build without traversing through the hierarchy.
use bbagaBuildkiteApiApiGuzzleClient;
use bbagaBuildkiteApiApiRestFluent;
use bbagaBuildkiteApiApiRestApi;
$client = new GuzzleClient();
$api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN');
/**
* Builds are identified by the follwoing three values
*/
$organizationSlug = 'my-org';
$pipelineSlug = 'my-pipeline';
$buildNumber = 23;
$organization = new FluentOrganization($api, ['slug' => $organizationSlug]);
$pipeline = new FluentPipeline($api, $organization, ['slug' => $pipelineSlug]);
$build = new FluentBuild($api, $organization, ['number' => $buildNumber, 'pipeline' => $pipeline]);
$build->fetch()->getJobs();use bbagaBuildkiteApiApiGuzzleClient;
use bbagaBuildkiteApiApiRestFluent;
use bbagaBuildkiteApiApiRestApi;
$client = new GuzzleClient();
$api = new RestApi($client, 'MY_BUILDKITE_API_TOKEN');
$organization = new FluentOrganization($api, ['slug' => 'my-org']);
$pipeline = $organization->createPipeline(
[
'name' => 'my-pipeline',
'repository' => '[email protected]:some/repo.git',
'steps' => [
[
'type' => 'script',
'name' => 'upload artifact',
'command' => 'echo "Hello" > artifact.txt
&& buildkite-agent artifact upload artifact.txt
&& cat artifact.txt | buildkite-agent annotate --style "success" --context "junit"',
],
[
'type' => 'manual',
'name' => 'Needs to be unblocked',
'command' => 'echo "Unblocked!"',
],
]
]
);
/**
* Pipeline is ready, we can kick off the first build
*/
$buildSettings = [
'commit' => 'HEAD',
'branch' => 'master',
'message' => 'Testing all the things :rocket:',
];
$pipeline->createBuild($buildSettings);Organizations related methods are exposed via $api->organization()
Detailed documentation for the Organizations API is available here
$api->organization()->list();$api->organization()->get('my-organization');Pipelines related methods are exposed via $api->pipeline()
Detailed documentation for the Pipelines API is available here
$api->pipeline()->list('my-organizations');$api->pipeline()->get('my-organization', 'my-pipeline');$pipelineData = [
'name' => 'My Pipeline',
'repository' => '[email protected]:acme-inc/my-pipeline.git',
'steps' => [
[
'type' => 'script',
'name' => 'Build :package:',
'command' => 'script/release.sh',
],
],
];
$api->pipeline()->create('my-organization', $pipelineData);$pipelineData = [
'repository' => '[email protected]:acme-inc/new-repo.git',
];
$api->pipeline()->update('my-organization', 'my-pipelines', $pipelineData);$api->pipeline()->delete('my-organization', 'my-pipeline');Builds related methods are exposed via $api->build()
Detailed documentation for the Builds API is available here
$api->build()->listAll($queryParameters);$buildNumber = 1;
$api->build()->get('my-organization', 'my-pipeline', $buildNumber);$api->build()->getByOrganization('my-organization', $queryParameters);$api->build()->getByPipeline('my-organization', 'my-pipeline', $queryParameters);$buildSettings = [
'commit' => 'abcd0b72a1e580e90712cdd9eb26d3fb41cd09c8',
'branch' => 'master',
'message' => 'Testing all the things :rocket:',
'author' => [
'name' => 'Keith Pitt',
'email' => '[email protected]',
],
'env' => [
'MY_ENV_VAR' => 'some_value',
],
'meta_data' => [
'some build data' => 'value',
'other build data' => true,
],
];
$api->build()->create('my-organization', 'my-pipeline', $buildSettings);$buildNumber = 12;
$api->build()->cancel('my-organization', 'my-pipeline', $buildNumber);$buildNumber = 12;
$api->build()->rebuild('my-organization', 'my-pipeline', $buildNumber);Jobs related methods are exposed via $api->job()
Detailed documentation for the Jobs API is available here
$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->job()->retry('my-organization', 'my-pipeline', $buildNumber, $jobId);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->job()->unblock('my-organization', 'my-pipeline', $buildNumber, $jobId);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->job()->getLogOutput('my-organization', 'my-pipeline', $buildNumber, $jobId);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->job()->deleteLogOutput('my-organization', 'my-pipeline', $buildNumber, $jobId);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->job()->getEnvironmentVariables('my-organization', 'my-pipeline', $buildNumber, $jobId);Jobs related methods are exposed via $api->artifact()
Detailed documentation for the Artifacts API is available here
$buildNumber = 12;
$api->artifact()->getByBuild('my-organization', 'my-pipeline', $buildNumber);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$api->artifact()->getByJob('my-organization', 'my-pipeline', $buildNumber, $jobId);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$artifactId = '567038da5f03724b02a1cbf07a12fbcedfg';
$api->artifact()->get(
'my-organization',
'my-pipeline',
$buildNumber,
$jobId,
$artifactId
);$buildNumber = 12;
$jobId = '0738da5f-0372-4b02-a1cb-f07a12fbcdcd';
$artifactId = '567038da5f03724b02a1cbf07a12fbcedfg';
$api->artifact()->delete(
'my-organization',
'my-pipeline',
$buildNumber,
$jobId,
$artifactId
);Agents related methods are exposed via $api->agent()
Detailed documentation for the Agents API is available here
$api->agent()->list('my-organization');$agentId = '1d633306-de28-4944-ad84-fde0d50a6c9e';
$api->agent()->list('my-organization', $agentId);$agentId = '1d633306-de28-4944-ad84-fde0d50a6c9e';
$api->agent()->list('my-organization', $agentId);Annotations related methods are exposed via $api->annotation()
Detailed documentation for the Annotations API is available here
$buildNumber = 12;
$api->annotation()->list('my-organization', 'my-pipeline', $buildNumber);Users related methods are exposed via $api->user()
Detailed documentation for the Users API is available here
$api->user()->whoami();Emojis related methods are exposed via $api->emoji()
Detailed documentation for the Users API is available here
$api->emoji()->list('my-organization');make testA Buildkite account and a running agent is required for integration testing and the following environment variables must be set.
BK_TEST_TOKENBK_TEST_ORGBK_TEST_PREFIXGITHUB_REFGITHUB_REPOSITORYThese can be set in the phpunit.xml by making a copy of phpunit.xml.dist and extending it with the following snippet
<php>
<env name="BK_TEST_TOKEN" value="my-buildkite-api-token"/>
<env name="BK_TEST_ORG" value="my-organization-slug"/>
<env name="BK_TEST_PREFIX" value="something-uniqe"/>
<env name="GITHUB_REF" value="refs/heads/master"/>
<env name="GITHUB_REPOSITORY" value="your-name/buildkite-php"/>
</php>Once the environment variables are set the test suite can be started
make integration