# HG changeset patch # User Kim Alvefur # Date 1554048612 -7200 # Node ID ea1edd7cfb0161a6f45839c6c4491e49592b64f6 # Parent d94875c3ddda5443fe2b7f416d9a5e36bb1d8be8 mod_pubsub_github: Add support for publishing to multiple node based on repository diff -r d94875c3ddda -r ea1edd7cfb01 mod_pubsub_github/README.markdown --- a/mod_pubsub_github/README.markdown Sun Mar 31 18:08:50 2019 +0200 +++ b/mod_pubsub_github/README.markdown Sun Mar 31 18:10:12 2019 +0200 @@ -20,18 +20,31 @@ Component "pubsub.example.com" "pubsub" modules_enabled = { "pubsub_github" } +The URL for Github to post to would be either: + +- `http://pubsub.example.com:5280/pubsub_github` +- `https://pubsub.example.com:5281/pubsub_github` + The module also takes the following config options: Name Default Description ----------------------- ------------------- ------------------------------------------------------------ `github_node` `"github"`{.lua} The pubsub node to publish commits on. `github_secret` **Required** Shared secret used to sign HTTP requests. + `github_node_prefix` `"github/"`{.lua} + `github_node_mapping` *not set* Field in repository object to use as node instead of `github_node` `github_actor` *superuser* Which actor to do the publish as (used for access control) -The URL for Github to post to would be either: +More advanced example -- http://pubsub.example.com:5280/pubsub\_github -- https://pubsub.example.com:5281/pubsub\_github +``` {.lua} +Component "pubsub.example.com" "pubsub" + modules_enabled = { "pubsub_github" } + github_actor = "github.com" + github_node_mapping = "name" --> github_node_prefix .. "repo" + -- github_node_mapping = "full_name" --> github_node_prefix .. "owner/repo" + github_secret = "sekr1t" +``` If your HTTP host doesn't match the pubsub component's address, you will need to inform Prosody. For more info see Prosody's [HTTP server diff -r d94875c3ddda -r ea1edd7cfb01 mod_pubsub_github/mod_pubsub_github.lua --- a/mod_pubsub_github/mod_pubsub_github.lua Sun Mar 31 18:08:50 2019 +0200 +++ b/mod_pubsub_github/mod_pubsub_github.lua Sun Mar 31 18:10:12 2019 +0200 @@ -5,7 +5,9 @@ local hmac_sha1 = require "util.hashes".hmac_sha1; local pubsub_service = module:depends("pubsub").service; -local node = module:get_option("github_node", "github"); +local default_node = module:get_option("github_node", "github"); +local node_prefix = module:get_option_string("github_node_prefix", "github/"); +local node_mapping = module:get_option_string("github_node_mapping"); local github_actor = module:get_option_string("github_actor") or true; local secret = module:get_option("github_secret"); @@ -37,6 +39,11 @@ return 501; end -- else .. is this even github? + local node = default_node; + if node_mapping then + node = node_prefix .. data.repository[node_mapping]; + end + for _, commit in ipairs(data.commits) do local ok, err = pubsub_service:publish(node, github_actor, commit.id, st.stanza("item", { id = commit.id, xmlns = "http://jabber.org/protocol/pubsub" }) @@ -65,13 +72,15 @@ }; }); -function module.load() - if not pubsub_service.nodes[node] then - local ok, err = pubsub_service:create(node, true); - if not ok then - module:log("error", "Error creating node: %s", err); - else - module:log("debug", "Node %q created", node); +if not node_mapping then + function module.load() + if not pubsub_service.nodes[default_node] then + local ok, err = pubsub_service:create(default_node, true); + if not ok then + module:log("error", "Error creating node: %s", err); + else + module:log("debug", "Node %q created", default_node); + end end end end