diff --git a/.drone.yml b/.drone.yml new file mode 100644 index 0000000..cd4c77d --- /dev/null +++ b/.drone.yml @@ -0,0 +1,27 @@ +--- +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 +... diff --git a/.woodpecker/check.yml b/.woodpecker/check.yml deleted file mode 100644 index baa5da1..0000000 --- a/.woodpecker/check.yml +++ /dev/null @@ -1,31 +0,0 @@ -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 diff --git a/README.md b/README.md index 420c711..9d05f48 100644 --- a/README.md +++ b/README.md @@ -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! Format is needed when using formatting (enabled by default). +be ready to go! diff --git a/flake.nix b/flake.nix index e02328a..df25640 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "A simple Matrix notifier for CI purposes"; + description = "Ambroisie's blog"; inputs = { futils = { @@ -36,8 +36,6 @@ in rec { apps = { - default = apps.matrix-notifier; - matrix-notifier = futils.lib.mkApp { drv = packages.matrix-notifier; }; }; @@ -58,24 +56,26 @@ }; }; - devShells = { - default = pkgs.mkShell { - name = "matrix-notifier"; + defaultApp = apps.matrix-notifier; - inputsFrom = with self.packages.${system}; [ - matrix-notifier - ]; + defaultPackage = packages.matrix-notifier; - inherit (self.checks.${system}.pre-commit) shellHook; - }; + devShell = pkgs.mkShell { + name = "matrix-notifier"; + + buildInputs = with pkgs; [ + curl + jq + shellcheck + ]; + + inherit (self.checks.${system}.pre-commit) shellHook; }; packages = { - default = packages.matrix-notifier; - matrix-notifier = pkgs.stdenvNoCC.mkDerivation rec { pname = "matrix-notifier"; - version = "0.4.0"; + version = "0.1.2"; src = ./matrix-notifier; diff --git a/matrix-notifier b/matrix-notifier index 838396a..95394df 100755 --- a/matrix-notifier +++ b/matrix-notifier @@ -9,14 +9,11 @@ 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 " 'CI_PIPELINE_STATUS'/'DRONE_BUILD_STATUS' indicates a failure." + print_err " 'DRONE_BUILD_STATUS' indicates a failure." } # Blessed Stack Overflow @@ -38,34 +35,15 @@ 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}" - 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 + local msg="Build *${DRONE_BUILD_STATUS}*" + msg="$msg ${DRONE_SYSTEM_PROTO}://${DRONE_SYSTEM_HOST}/${DRONE_REPO}/${DRONE_BUILD_NUMBER}" msg="$msg (${DRONE_TAG:-$DRONE_BRANCH})" printf '%s' "$msg" } ensure_variables() { - if [ "$CI" == "woodpecker" ] && [ -z "$MESSAGE" ]; then - MESSAGE="$(default_woodpecker_message)" - elif [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then + if [ "$DRONE" == "true" ] && [ -z "$MESSAGE" ]; then MESSAGE="$(default_drone_message)" fi @@ -83,9 +61,7 @@ ensure_variables() { get_message_type() { if [ "$MSG_TYPE" == "auto" ]; then - if [ "$CI_PIPELINE_STATUS" == "failure" ]; then - MSG_TYPE="text" - elif [ "$DRONE_BUILD_STATUS" == "failure" ]; then + if [ "$DRONE_BUILD_STATUS" == "failure" ]; then MSG_TYPE="text" else MSG_TYPE="notice" @@ -96,13 +72,12 @@ get_message_type() { } make_message_json() { - { - printf '%s' "$1" | - jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}" - [ "$FORMAT" == "true" ] && printf '%s' "$1" | + jq -s '.[0] * .[1]' \ + <(printf '%s' "$1" | pandoc | - jq --raw-input --slurp "{format: \"org.matrix.custom.html\", formatted_body: .}" - } | jq -s 'add' + jq --raw-input --slurp "{format: \"org.matrix.custom.html\", formatted_body: .}") \ + <(printf '%s' "$1" | + jq --raw-input --slurp "{msgtype: \"$(get_message_type)\", body: .}") } send_message() { @@ -135,25 +110,12 @@ send_message() { } 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