Compare commits
19 commits
Author | SHA1 | Date | |
---|---|---|---|
Bruno BELANYI | 31b3b9fd24 | ||
Bruno BELANYI | 37491e91e6 | ||
Bruno BELANYI | 48dad0c962 | ||
Bruno BELANYI | a57f1cfa71 | ||
Bruno BELANYI | d30a2d7366 | ||
Bruno BELANYI | 436483aac7 | ||
Bruno BELANYI | cb62f179a3 | ||
Bruno BELANYI | 04758f81f2 | ||
Bruno BELANYI | eebe509b02 | ||
Bruno BELANYI | 0bc11d85d5 | ||
Bruno BELANYI | 007994e0a2 | ||
Bruno BELANYI | b6a9c7e6a4 | ||
Bruno BELANYI | 5f1fb1c1a4 | ||
Bruno BELANYI | 05ab9425dd | ||
Bruno BELANYI | d2b019f29d | ||
Bruno BELANYI | fe0de738b0 | ||
Bruno BELANYI | 758e4599ed | ||
Bruno BELANYI | 75d482cd6b | ||
Bruno BELANYI | 261f3b27ec |
27
.drone.yml
27
.drone.yml
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
kind: pipeline
|
||||
type: exec
|
||||
name: Matrix Notifier check
|
||||
|
||||
steps:
|
||||
- name: Pre-commit checks
|
||||
commands:
|
||||
- nix flake check
|
||||
|
||||
- name: Notifiy
|
||||
commands:
|
||||
- nix run .
|
||||
environment:
|
||||
ADDRESS:
|
||||
from_secret: matrix_homeserver
|
||||
ROOM:
|
||||
from_secret: matrix_roomid
|
||||
USER:
|
||||
from_secret: matrix_username
|
||||
PASS:
|
||||
from_secret: matrix_password
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
||||
...
|
31
.woodpecker/check.yml
Normal file
31
.woodpecker/check.yml
Normal file
|
@ -0,0 +1,31 @@
|
|||
labels:
|
||||
type: exec
|
||||
|
||||
steps:
|
||||
- name: flake check
|
||||
image: bash
|
||||
commands:
|
||||
- nix flake check
|
||||
|
||||
- name: package check
|
||||
image: bash
|
||||
commands:
|
||||
- nix build
|
||||
|
||||
- name: notifiy
|
||||
image: bash
|
||||
secrets:
|
||||
- source: matrix_password
|
||||
target: pass
|
||||
- source: matrix_homeserver
|
||||
target: address
|
||||
- source: matrix_roomid
|
||||
target: room
|
||||
- source: matrix_username
|
||||
target: user
|
||||
commands:
|
||||
- nix run .
|
||||
when:
|
||||
status:
|
||||
- failure
|
||||
- success
|
|
@ -31,4 +31,4 @@ export MESSAGE='This is my test message'
|
|||
This script is packaged with `Nix`, you can just use `nix run .` to run it.
|
||||
|
||||
The only dependencies are `bash`, `curl`, and `jq`, install those and you should
|
||||
be ready to go!
|
||||
be ready to go! Format is needed when using formatting (enabled by default).
|
||||
|
|
29
flake.nix
29
flake.nix
|
@ -1,5 +1,5 @@
|
|||
{
|
||||
description = "Ambroisie's blog";
|
||||
description = "A simple Matrix notifier for CI purposes";
|
||||
|
||||
inputs = {
|
||||
futils = {
|
||||
|
@ -36,6 +36,8 @@
|
|||
in
|
||||
rec {
|
||||
apps = {
|
||||
default = apps.matrix-notifier;
|
||||
|
||||
matrix-notifier =
|
||||
futils.lib.mkApp { drv = packages.matrix-notifier; };
|
||||
};
|
||||
|
@ -56,26 +58,24 @@
|
|||
};
|
||||
};
|
||||
|
||||
defaultApp = apps.matrix-notifier;
|
||||
devShells = {
|
||||
default = pkgs.mkShell {
|
||||
name = "matrix-notifier";
|
||||
|
||||
defaultPackage = packages.matrix-notifier;
|
||||
inputsFrom = with self.packages.${system}; [
|
||||
matrix-notifier
|
||||
];
|
||||
|
||||
devShell = pkgs.mkShell {
|
||||
name = "matrix-notifier";
|
||||
|
||||
buildInputs = with pkgs; [
|
||||
curl
|
||||
jq
|
||||
shellcheck
|
||||
];
|
||||
|
||||
inherit (self.checks.${system}.pre-commit) shellHook;
|
||||
inherit (self.checks.${system}.pre-commit) shellHook;
|
||||
};
|
||||
};
|
||||
|
||||
packages = {
|
||||
default = packages.matrix-notifier;
|
||||
|
||||
matrix-notifier = pkgs.stdenvNoCC.mkDerivation rec {
|
||||
pname = "matrix-notifier";
|
||||
version = "0.1.1";
|
||||
version = "0.4.0";
|
||||
|
||||
src = ./matrix-notifier;
|
||||
|
||||
|
@ -99,6 +99,7 @@
|
|||
wrapperPath = with pkgs; lib.makeBinPath [
|
||||
curl
|
||||
jq
|
||||
pandoc
|
||||
];
|
||||
|
||||
fixupPhase = ''
|
||||
|
|
|
@ -9,11 +9,14 @@ usage() {
|
|||
print_err ""
|
||||
print_err " -h, --help"
|
||||
print_err " print this usage screen and exit"
|
||||
print_err " -f, --format"
|
||||
print_err " should the message be formatted using 'pandoc'."
|
||||
print_err " Must be either 'true' or 'false'."
|
||||
print_err " -t, --type"
|
||||
print_err " which message type should be sent must be one of"
|
||||
print_err " 'text' or 'notice', or 'auto'."
|
||||
print_err " The special value 'auto' defaults to 'notice', unless"
|
||||
print_err " 'DRONE_BUILD_STATUS' indicates a failure."
|
||||
print_err " 'CI_PIPELINE_STATUS'/'DRONE_BUILD_STATUS' indicates a failure."
|
||||
}
|
||||
|
||||
# Blessed Stack Overflow
|
||||
|
@ -35,15 +38,34 @@ rawurlencode() {
|
|||
echo "$encoded")
|
||||
}
|
||||
|
||||
default_woodpecker_message() {
|
||||
local msg="Build ${CI_PIPELINE_STATUS}"
|
||||
local woodpecker_url="${CI_PIPELINE_URL}"
|
||||
if [ "$FORMAT" == "true" ]; then
|
||||
msg="$msg [${CI_REPO}#${CI_COMMIT_SHA:0:8}]($woodpecker_url)"
|
||||
else
|
||||
msg="$msg $woodpecker_url"
|
||||
fi
|
||||
msg="$msg (${CI_COMMIT_TAG:-$CI_COMMIT_BRANCH})"
|
||||
printf '%s' "$msg"
|
||||
}
|
||||
|
||||
default_drone_message() {
|
||||
local msg="Build ${DRONE_BUILD_STATUS}"
|
||||
msg="$msg ${DRONE_SYSTEM_PROTO}://${DRONE_SYSTEM_HOST}/${DRONE_REPO}/${DRONE_BUILD_NUMBER}"
|
||||
msg="$msg (${DRONE_BRANCH})"
|
||||
local drone_url="${DRONE_SYSTEM_PROTO}://${DRONE_SYSTEM_HOST}/${DRONE_REPO}/${DRONE_BUILD_NUMBER}"
|
||||
if [ "$FORMAT" == "true" ]; then
|
||||
msg="$msg [${DRONE_REPO_OWNER}/${DRONE_REPO_NAME}#${DRONE_COMMIT:0:8}]($drone_url)"
|
||||
else
|
||||
msg="$msg $drone_url"
|
||||
fi
|
||||
msg="$msg (${DRONE_TAG:-$DRONE_BRANCH})"
|
||||
printf '%s' "$msg"
|
||||
}
|
||||
|
||||
ensure_variables() {
|
||||
if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then
|
||||
if [ "$CI" == "woodpecker" ] && [ -z "$MESSAGE" ]; then
|
||||
MESSAGE="$(default_woodpecker_message)"
|
||||
elif [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then
|
||||
MESSAGE="$(default_drone_message)"
|
||||
fi
|
||||
|
||||
|
@ -61,7 +83,9 @@ ensure_variables() {
|
|||
|
||||
get_message_type() {
|
||||
if [ "$MSG_TYPE" == "auto" ]; then
|
||||
if [ "$DRONE_BUILD_STATUS" == "failure" ]; then
|
||||
if [ "$CI_PIPELINE_STATUS" == "failure" ]; then
|
||||
MSG_TYPE="text"
|
||||
elif [ "$DRONE_BUILD_STATUS" == "failure" ]; then
|
||||
MSG_TYPE="text"
|
||||
else
|
||||
MSG_TYPE="notice"
|
||||
|
@ -71,6 +95,16 @@ get_message_type() {
|
|||
printf '%s' "m.$MSG_TYPE"
|
||||
}
|
||||
|
||||
make_message_json() {
|
||||
{
|
||||
printf '%s' "$1" |
|
||||
jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}"
|
||||
[ "$FORMAT" == "true" ] && printf '%s' "$1" |
|
||||
pandoc |
|
||||
jq --raw-input --slurp "{format: \"org.matrix.custom.html\", formatted_body: .}"
|
||||
} | jq -s 'add'
|
||||
}
|
||||
|
||||
send_message() {
|
||||
local login_json
|
||||
local token
|
||||
|
@ -94,20 +128,32 @@ send_message() {
|
|||
exit 1
|
||||
fi
|
||||
|
||||
message_json="$(printf '%s' "$MESSAGE" |
|
||||
jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}")"
|
||||
message_json="$(make_message_json "$MESSAGE")"
|
||||
curl -XPOST \
|
||||
-d "$message_json" \
|
||||
"$ADDRESS/_matrix/client/r0/rooms/$(rawurlencode "$ROOM")/send/m.room.message?access_token=$(rawurlencode "$token")" 2>/dev/null
|
||||
}
|
||||
|
||||
MSG_TYPE='auto'
|
||||
FORMAT='true'
|
||||
|
||||
while [ $# -gt 0 ]; do
|
||||
opt="$1"
|
||||
shift
|
||||
|
||||
case "$opt" in
|
||||
-f|--format)
|
||||
arg="$1"
|
||||
shift
|
||||
|
||||
if [ "$arg" == "true" ] || [ "$arg" == "false" ]; then
|
||||
FORMAT="$arg"
|
||||
continue
|
||||
fi
|
||||
|
||||
print_err "Must give value 'true' or 'false' with '-t|--type'"
|
||||
exit 1
|
||||
;;
|
||||
-t|--type)
|
||||
arg="$1"
|
||||
shift
|
||||
|
|
Loading…
Reference in a new issue