deployer/contrib/workplace.php

132 lines
3.6 KiB
PHP
Raw Normal View History

2020-04-25 23:00:08 +03:00
<?php
2020-10-02 00:11:13 +02:00
/*
## Installing
This recipes works with Custom Integrations and Publishing Bots.
Require the new recipe into your `deploy.php`
```php
require 'contrib/workplace.php';
```
Add hook on deploy:
```
before('deploy', 'workplace:notify');
```
## Configuration
- `workplace_webhook` - incoming workplace webhook **required**
```
// With custom integration
set('workplace_webhook', 'https://graph.facebook.com/<GROUP_ID>/feed?access_token=<ACCESS_TOKEN>');
// With publishing bot
set('workplace_webhook', 'https://graph.facebook.com/v3.0/group/feed?access_token=<ACCESS_TOKEN>');
// Use markdown on message
set('workplace_webhook', 'https://graph.facebook.com/<GROUP_ID>/feed?access_token=<ACCESS_TOKEN>&formatting=MARKDOWN');
```
2020-04-25 23:00:08 +03:00
2020-10-02 00:11:13 +02:00
- `workplace_text` - notification message
```
set('workplace_text', '_{{user}}_ deploying `{{branch}}` to *{{target}}*');
```
- `workplace_success_text` success template, default:
```
set('workplace_success_text', 'Deploy to *{{target}}* successful');
```
- `workplace_failure_text` failure template, default:
```
set('workplace_failure_text', 'Deploy to *{{target}}* failed');
```
- `workplace_edit_post` whether to create a new post for deploy result, or edit the first one created, default creates a new post:
```
set('workplace_edit_post', false);
```
## Usage
If you want to notify only about beginning of deployment add this line only:
```php
before('deploy', 'workplace:notify');
```
If you want to notify about successful end of deployment add this too:
```php
2020-10-29 23:16:36 +01:00
after('deploy:success', 'workplace:notify:success');
2020-10-02 00:11:13 +02:00
```
If you want to notify about failed deployment add this too:
```php
after('deploy:failed', 'workplace:notify:failure');
```
*/
2020-04-25 23:00:08 +03:00
namespace Deployer;
use Deployer\Utility\Httpie;
// Deploy message
set('workplace_text', '_{{user}}_ deploying `{{branch}}` to *{{target}}*');
set('workplace_success_text', 'Deploy to *{{target}}* successful');
set('workplace_failure_text', 'Deploy to *{{target}}* failed');
// By default, create a new post for every message
set('workplace_edit_post', false);
desc('Notifying Workplace');
task('workplace:notify', function () {
if (!get('workplace_webhook', false)) {
return;
}
$url = get('workplace_webhook') . '&message=' . urlencode(get('workplace_text'));
$response = Httpie::post($url)->getJson();
if (get('workplace_edit_post', false)) {
// Endpoint will be something like: https//graph.facebook.com/<POST_ID>?<QUERY_PARAMS>
$url = sprintf(
'%s://%s/%s?%s',
parse_url(get('workplace_webhook'), PHP_URL_SCHEME),
parse_url(get('workplace_webhook'), PHP_URL_HOST),
$response['id'],
parse_url(get('workplace_webhook'), PHP_URL_QUERY)
);
// Replace the webhook with a url that points to the created post
set('workplace_webhook', $url);
}
})
->once()
->shallow()
->hidden();
desc('Notifying Workplace about deploy finish');
task('workplace:notify:success', function () {
if (!get('workplace_webhook', false)) {
return;
}
$url = get('workplace_webhook') . '&message=' . urlencode(get('workplace_success_text'));
return Httpie::post($url)->send();
})
->once()
->shallow()
->hidden();
desc('Notifying Workplace about deploy failure');
task('workplace:notify:failure', function () {
if (!get('workplace_webhook', false)) {
return;
}
$url = get('workplace_webhook') . '&message=' . urlencode(get('workplace_failure_text'));
return Httpie::post($url)->send();
})
->once()
->shallow()
->hidden();