tanium / octobot Goto Github PK
View Code? Open in Web Editor NEWgithub bot with slack and jira integration
License: MIT License
github bot with slack and jira integration
License: MIT License
Currently backport
labels require that release branches start with "release/". They may also have restrictions on looking for numeric release branches as well. This should be configurable per repo.
In many workflows, the next step after creating a new Jira Version/Release is to add links to that release in documentation or comms.
Right now after collapsing a version, users need to go back into jira to get the link to the new release.
It would let them skip a step if Octobot showed the link directly on the Success page.
Probably will use sqlite just to keep it simple
When I submit review request to a group (ex: console-developers), Octobot doesn't handle the status : Pull Request submitted for review to (tanium/tux-console)
Bonus: Would be nice to display the group name, or even better tag everyone in the group so they get a notification
The admin web UI currently requires the user and repo config files to exist and have correct formatting before the "add <item>" button appears.
Octobot should create a users/repos config file with acceptable defaults if no file exists at startup, or if the file exists but is empty.
This functionality should make implementation of #153 slightly easier.
If a source PR has labels, apply all labels excluding backport labels to backport PRs.
These labels might be useful for controlling build processes (enabling/disabling nodes), or other organizational purposes.
Octobot sometimes ends up sending dupliclate slack messages that we can do a bit better deduplicating. One example: the github webhook API sends three separate events if a PR is simultaneously assigned to three people.
Idea: move slack messaging into a single thread that waits a bit before sending things out to try to catch duplicates.
Currently we guess at slack usernames based on github usernames: "matt-hauck" we guess is "matt.hauck". While this was nice for easy deploying, it is probably not super helpful in the general case and also results in lack of clarity about who is setup for messaging and who is not. Maybe we should remove this.
Moving them to a single worker thread has had some adverse effects: primarily that the messages are not being processes fast enough. This is probably because there is a single slack worker thread, and because we wait for each response to finish before issuing another one.
Since renaming master
to main
, Octobot stopped setting a fix-version when merging into the branch.
Looking at the codebase, I can see that is_main_branch
assumes the main branch to be named master
, develop
, or have the release branch prefix.
My suggestion: add a repo config option for a regular expression that is to be used for matching the main branch of a repository, and have it default to ^(main|master|develop)$
.
Often a backport fails because there's some other commit that needs to be backported first.
In that case, I typically toggle the backport label on/off to tell octobot to try the backport again.
In that case, it would make sense for octobot to clear the failed-backport
label.
I'm unable to get octobot to build using python build.py
, but it's failing. I see errors in two spots:
Failing to findsrc/lib.rs
... Unsure of what to make of this, as the container creation continues afterward
Compiling octobot v0.1.0 (/usr/src/app)
error: couldn't read src/lib.rs: No such file or directory (os error 2)
error: aborting due to previous error
error: could not compile `octobot`.
warning: build failed, waiting for other jobs to finish...
error: build failed
Removing intermediate container 22cc0d8ae188
---> 7c45f8ba7d0b
Step 13/17 : RUN cargo build --release; exit 0
Failing while linking:
error: linking with `cc` failed: exit code: 1
|
= note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.1lp4lrb0f184098k.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.22wtbdbg5ni5493h.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.2488gg2yykzlw3av.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.27hijqfo72kzfkav.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.2rka4dag30kdfk5c.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.33s3mt0g8fn5edsd.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.377620foo6g9eont.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.3mf4iiwkh8ji0rna.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.3z1hngtcejcbh54t.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.43oewbi7p0m8p8kn.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.4ehuh8b0ssmljak.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.4eklxpcuap6pjt0n.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.4voka3hllbot1dwc.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.4wjmybu4raz95p2c.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.51gs80q3bjrp2hb9.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.52270bqclfamvm9j.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.cztrjn2976nbcvo.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.e65e7bhthr9urub.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.hx2tm608dz0itle.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.jklzf8d5r9cff03.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.o9aksso4sv63t20.rcgu.o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.oxv4gz1i1h81clu.rcgu.o" "-o" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19" "/usr/src/app/target/debug/deps/octobot_passwd-ce026d7ee9d74c19.5dafivi1b0pbi7x3.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/usr/src/app/target/debug/deps" "-L" "/usr/src/app/target/debug/build/backtrace-sys-ea506c0ecb483b73/out" "-L" "/usr/src/app/target/debug/build/ring-282d4719a7ed499f/out" "-L" "/usr/src/app/target/debug/build/rust-crypto-3f0f4fdb7c23703f/out" "-L" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/usr/src/app/target/debug/deps/librpassword-db2b4ea6a09859da.rlib" "/usr/src/app/target/debug/deps/liboctobot-1b690e00f50d29af.rlib" "/usr/src/app/target/debug/deps/libtokio_rustls-d1beaecc6cc8ee21.rlib" "/usr/src/app/target/debug/deps/librustls-1abd8845347fbfed.rlib" "/usr/src/app/target/debug/deps/libsct-4ca3c502fbf17398.rlib" "/usr/src/app/target/debug/deps/libwebpki-4153261d02a72f94.rlib" "/usr/src/app/target/debug/deps/libjsonwebtoken-3fcd3c175cc923a9.rlib" "/usr/src/app/target/debug/deps/libchrono-611aa96179d17ebc.rlib" "/usr/src/app/target/debug/deps/libnum_integer-0f0be27910b61e93.rlib" "/usr/src/app/target/debug/deps/libnum_traits-de8e4d932392db56.rlib" "/usr/src/app/target/debug/deps/libbase64-090d1174b32af6e3.rlib" "/usr/src/app/target/debug/deps/libsafemem-167e44e982d5a64f.rlib" "/usr/src/app/target/debug/deps/libopenldap-25055fccdd77c937.rlib" "/usr/src/app/target/debug/deps/libreqwest-b358f27bcb2208f6.rlib" "/usr/src/app/target/debug/deps/libuuid-99eaf6a4bb37cc05.rlib" "/usr/src/app/target/debug/deps/libserde_urlencoded-a8cf096818683eee.rlib" "/usr/src/app/target/debug/deps/libdtoa-8f557dac8050bc69.rlib" "/usr/src/app/target/debug/deps/libserde_json-64783692140f9281.rlib" "/usr/src/app/target/debug/deps/libryu-380961f19cdf4a45.rlib" "/usr/src/app/target/debug/deps/libmime_guess-1c873ac810354db4.rlib" "/usr/src/app/target/debug/deps/libphf-73d61889d7496de0.rlib" "/usr/src/app/target/debug/deps/libphf_shared-740e150bff3f939e.rlib" "/usr/src/app/target/debug/deps/libunicase-e9174cdcef9b616d.rlib" "/usr/src/app/target/debug/deps/libsiphasher-465dbbc988712d47.rlib" "/usr/src/app/target/debug/deps/libmime-6003fd5873a846c7.rlib" "/usr/src/app/target/debug/deps/libunicase-170da0b61ac3531e.rlib" "/usr/src/app/target/debug/deps/libflate2-82025cbbb1e168cb.rlib" "/usr/src/app/target/debug/deps/libminiz_oxide_c_api-bbd837d517e01b62.rlib" "/usr/src/app/target/debug/deps/libminiz_oxide-056f47256effd964.rlib" "/usr/src/app/target/debug/deps/libadler32-f080593a2d17ab9a.rlib" "/usr/src/app/target/debug/deps/libcrc-5857b937db159a93.rlib" "/usr/src/app/target/debug/deps/libcrc32fast-b0a1edf6f658a284.rlib" "/usr/src/app/target/debug/deps/libhyper_tls-03fad2f1bcbbf0f4.rlib" "/usr/src/app/target/debug/deps/libnative_tls-9ed6c816bf8b7657.rlib" "/usr/src/app/target/debug/deps/libopenssl_probe-737eaa0fa0033a5f.rlib" "/usr/src/app/target/debug/deps/libopenssl-90c658a9a798f548.rlib" "/usr/src/app/target/debug/deps/libopenssl_sys-bdbaecc6bde0e66d.rlib" "/usr/src/app/target/debug/deps/libforeign_types-ec6ff16a564295ee.rlib" "/usr/src/app/target/debug/deps/libforeign_types_shared-7c96e2f113846ce7.rlib" "/usr/src/app/target/debug/deps/libhyper-54b4694647d74307.rlib" "/usr/src/app/target/debug/deps/libwant-b748df49560153b9.rlib" "/usr/src/app/target/debug/deps/libtry_lock-5f1ed79c2d0214f4.rlib" "/usr/src/app/target/debug/deps/libtokio-1c4e8873e7dee72b.rlib" "/usr/src/app/target/debug/deps/libtokio_trace_core-24a2896b9c0f9e45.rlib" "/usr/src/app/target/debug/deps/libtokio_uds-3ea9167e111dbba2.rlib" "/usr/src/app/target/debug/deps/libmio_uds-daab6a37a8f458c3.rlib" "/usr/src/app/target/debug/deps/libtokio_udp-1bc11f5b8b5b37c4.rlib" "/usr/src/app/target/debug/deps/libtokio_timer-9d7e544ab3732597.rlib" "/usr/src/app/target/debug/deps/libtokio_tcp-b15da060c857b440.rlib" "/usr/src/app/target/debug/deps/libtokio_reactor-d741bc11b80b47f5.rlib" "/usr/src/app/target/debug/deps/libtokio_sync-83c5cda7725a2c74.rlib" "/usr/src/app/target/debug/deps/libparking_lot-ec1dd3e54b1264c9.rlib" "/usr/src/app/target/debug/deps/libparking_lot_core-0fbcc3b5a92f4a7e.rlib" "/usr/src/app/target/debug/deps/liblock_api-e1e38b068dbf4714.rlib" "/usr/src/app/target/debug/deps/libowning_ref-89c848f04dc5b899.rlib" "/usr/src/app/target/debug/deps/libstable_deref_trait-164fe8ec5e782f93.rlib" "/usr/src/app/target/debug/deps/libtokio_fs-af0c37cec7effc47.rlib" "/usr/src/app/target/debug/deps/libtokio_threadpool-70c8d5c9a259ac8a.rlib" "/usr/src/app/target/debug/deps/librand-ad95c1e1972cb2a2.rlib" "/usr/src/app/target/debug/deps/librand_xorshift-39ff54e85ecea627.rlib" "/usr/src/app/target/debug/deps/librand_pcg-2240bde706cdbf07.rlib" "/usr/src/app/target/debug/deps/librand_hc-6684657266b57e47.rlib" "/usr/src/app/target/debug/deps/librand_chacha-740a118732eb8d00.rlib" "/usr/src/app/target/debug/deps/librand_isaac-df40fd426b2007f4.rlib" "/usr/src/app/target/debug/deps/librand_core-abbd1175bf08781c.rlib" "/usr/src/app/target/debug/deps/librand_os-7405437f476875d8.rlib" "/usr/src/app/target/debug/deps/librand_jitter-e7bec4e4163c2796.rlib" "/usr/src/app/target/debug/deps/librand_core-e78d0c37f81639ae.rlib" "/usr/src/app/target/debug/deps/libcrossbeam_queue-9c8d825b3cccfba5.rlib" "/usr/src/app/target/debug/deps/libcrossbeam_deque-f314112facacc1d6.rlib" "/usr/src/app/target/debug/deps/libcrossbeam_epoch-56f066db6877dab4.rlib" "/usr/src/app/target/debug/deps/libscopeguard-b8bc80607c5cd4c0.rlib" "/usr/src/app/target/debug/deps/libmemoffset-89962ea93857544e.rlib" "/usr/src/app/target/debug/deps/libarrayvec-461b454249e1827c.rlib" "/usr/src/app/target/debug/deps/libnodrop-75f98521131d35db.rlib" "/usr/src/app/target/debug/deps/libtokio_current_thread-5e2c1f9f23891632.rlib" "/usr/src/app/target/debug/deps/libtokio_executor-2a738b112b02369c.rlib" "/usr/src/app/target/debug/deps/libcrossbeam_utils-e684ca3d7dac4717.rlib" "/usr/src/app/target/debug/deps/libtokio_codec-21741d5bb7b250b3.rlib" "/usr/src/app/target/debug/deps/libmio-5925bbdbfc8cf088.rlib" "/usr/src/app/target/debug/deps/liblazycell-eb4403d25e372747.rlib" "/usr/src/app/target/debug/deps/libnet2-f0a9284a62429d76.rlib" "/usr/src/app/target/debug/deps/libhttparse-439c701aec052076.rlib" "/usr/src/app/target/debug/deps/libh2-e54858bf11fc7f14.rlib" "/usr/src/app/target/debug/deps/libindexmap-aab4fd314b4d4c22.rlib" "/usr/src/app/target/debug/deps/libstring-5851f5fdb5eac619.rlib" "/usr/src/app/target/debug/deps/libslab-5ea91c94d3974c1f.rlib" "/usr/src/app/target/debug/deps/libtokio_io-20ac931ce44c30c8.rlib" "/usr/src/app/target/debug/deps/libfutures_cpupool-4b569d9734a3ddff.rlib" "/usr/src/app/target/debug/deps/libnum_cpus-92791a427d4c9cba.rlib" "/usr/src/app/target/debug/deps/libhttp-90c8eeb0a1b20af5.rlib" "/usr/src/app/target/debug/deps/libitoa-e69d746cf1403762.rlib" "/usr/src/app/target/debug/deps/libfnv-303abd85c763d7e3.rlib" "/usr/src/app/target/debug/deps/libfutures-a66ff0ab48c7118c.rlib" "/usr/src/app/target/debug/deps/libbytes-4336f006b12be1b5.rlib" "/usr/src/app/target/debug/deps/libiovec-cd33e778f2d02269.rlib" "/usr/src/app/target/debug/deps/libbase64-0dc17b208229220e.rlib" "/usr/src/app/target/debug/deps/libbyteorder-235de35dad194112.rlib" "/usr/src/app/target/debug/deps/liburl-7e8102c2249657da.rlib" "/usr/src/app/target/debug/deps/libpercent_encoding-2cf0c3b07360ed5c.rlib" "/usr/src/app/target/debug/deps/libidna-bb1b05da9a420839.rlib" "/usr/src/app/target/debug/deps/libunicode_normalization-dad32f9d02ead919.rlib" "/usr/src/app/target/debug/deps/libsmallvec-ab1d05c1b45972a0.rlib" "/usr/src/app/target/debug/deps/libunicode_bidi-a143b425be023ab1.rlib" "/usr/src/app/target/debug/deps/libmatches-b1903b662ca90c7e.rlib" "/usr/src/app/target/debug/deps/libunidiff-422edca6d0820f3e.rlib" "/usr/src/app/target/debug/deps/libencoding_rs-ddaae043a26f4010.rlib" "/usr/src/app/target/debug/deps/libregex-f592e94b12c6c204.rlib" "/usr/src/app/target/debug/deps/libutf8_ranges-fc059ea282902d70.rlib" "/usr/src/app/target/debug/deps/libregex_syntax-b3086920b98a4180.rlib" "/usr/src/app/target/debug/deps/libucd_util-4dec9ecd656bfe7c.rlib" "/usr/src/app/target/debug/deps/libthread_local-5a78408fb9811a5c.rlib" "/usr/src/app/target/debug/deps/libaho_corasick-e4ed35ddfe7dd401.rlib" "/usr/src/app/target/debug/deps/librusqlite-fad6fbb92bececd8.rlib" "/usr/src/app/target/debug/deps/libmemchr-d621f830b37fbb26.rlib" "/usr/src/app/target/debug/deps/libtime-429ce1bd811ee33a.rlib" "/usr/src/app/target/debug/deps/libfallible_streaming_iterator-b26d868ad3395c8e.rlib" "/usr/src/app/target/debug/deps/libfallible_iterator-154833e26b6ffde8.rlib" "/usr/src/app/target/debug/deps/liblru_cache-52fd28c098422325.rlib" "/usr/src/app/target/debug/deps/liblinked_hash_map-851580ce4df3a3a7.rlib" "/usr/src/app/target/debug/deps/liblibsqlite3_sys-0743caabb566237f.rlib" "/usr/src/app/target/debug/deps/libbitflags-249d56a0cdef692c.rlib" "/usr/src/app/target/debug/deps/liblog-7581c05268768fe3.rlib" "/usr/src/app/target/debug/deps/libtoml-507253e129955117.rlib" "/usr/src/app/target/debug/deps/libserde-092a8ddf821a6c37.rlib" "/usr/src/app/target/debug/deps/libfailure-571056644aada951.rlib" "/usr/src/app/target/debug/deps/libbacktrace-c94dd9d64e13143a.rlib" "/usr/src/app/target/debug/deps/libbacktrace_sys-6982afdf8d0c2f9a.rlib" "/usr/src/app/target/debug/deps/librustc_demangle-98fef6bb2b4f6ea4.rlib" "/usr/src/app/target/debug/deps/libcfg_if-55324d9a6283ffd6.rlib" "/usr/src/app/target/debug/deps/librustc_serialize-874d4000f23a33a0.rlib" "/usr/src/app/target/debug/deps/libring-0ed8a531e02fa47f.rlib" "/usr/src/app/target/debug/deps/libspin-9a9e511eda1ee355.rlib" "/usr/src/app/target/debug/deps/liblazy_static-5c808ee881cba7b0.rlib" "/usr/src/app/target/debug/deps/libuntrusted-d546845b7c09bba0.rlib" "/usr/src/app/target/debug/deps/liblibc-b560bbf34f5b2d4f.rlib" "-Wl,--start-group" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-fae576517123aa4e.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-a72070139220275e.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-093434daf7d99801.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-24daf38551b7a03b.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace-36d70d9746402ce9.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-7acfc843240167a8.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-eb2e0f5fe057b8b3.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-75e9ddd83715a368.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcfg_if-af51e7c6fd7d1248.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-27f2a77b2995d98c.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-ad10152c26711a1e.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-291bd2456cb6c9fe.rlib" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-fc6e9071307a3016.rlib" "-Wl,--end-group" "/root/.rustup/toolchains/1.39.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-ebe4001ded7f33e7.rlib" "-Wl,-Bdynamic" "-llber" "-lldap_r" "-lssl" "-lcrypto" "-lsqlite3" "-lutil" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil"
= note: collect2: fatal error: ld terminated with signal 9 [Killed]
compilation terminated.
If a chore PR has a JIRA present in one of the commits, it can be marked as passing the JIRA check. This would give a better experience to devs, showing that the JIRA has been processed by octobot and JIRAs will be updated correctly
If a chore PR does not have a JIRA present in one of the commits, the current behavior is fine, although it could be reworded as, for example, "Ignored JIRA check".
When adding a new JIRA version, we should also search for old versions (matching major/minor) to collapse into this new version. Provide a checkbox list of versions to merge after in "Preview" state.
Right now it isn't possible to create a user or repo config from scratch from the web interface because there is no way to add a github host.
Needed to resolve #154
If a PR is submitted for review to users (or groups) that can't be mapped to Slack usernames, the Slack channel notifications omit those names entirely instead of falling back to the GitHub user/group name. Other notifications, like PR comments or approvals, show the GitHub name.
e.g., if none of the GitHub names can be mapped to Slack usernames, the notification is just:
Pull Request submitted for review to ย (repository/name)
vs.
Pull Request submitted for review to johnsmith (repository/name)
Right now there is a octobot has a project setting to enable jira transitions, but once its enable, you are required to add "Fixes JIRA_ID" to get it to actually tranistion the ticket.
For protect, we want to just automatically tranistion PR's ticket, and its awkward to add that "fixes x" bit, since all the PR's have the format "Prot-1234 fixes something..."
It would be nice if we had the ability to either specify the regex that is used to pick up these transitions, or just have a flag to "always transition" vs "require "Fixed" prefex"
today I had a need to backport an empty commit to two release branches to trigger builds
I made an empty commit to my develop
branch, and added my backport-3.2
and backport-3.1
labels like normal
it appears that octobot didn't cherry-pick that merged commit, and it should maybe add the --allow-empty
flag to the cherry-pick command when creating the backport PRs
The admin web UI is not very friendly to multiple concurrent users. Easy to have people stepping on each others toes. Would be better to add/remove entries one at a time rather than doing a wholesale replace each time.
Currently, users achieve peace and quiet from slack direct messages by entering in their slack user as "DO NOT DISTURB". This has the unfortunate consequence of making slack comments into the reviews channel look funny, as in "DO NOT DISTURB commented, saying..."
We should add an explicit flag to not direct messages
Turns out, you actually want error messages to always be sent, whether they're duplicates or not. (introduced by fix to #85)
Certain workflows call for doing additional manual testing while a change is in PR, before that PR can be merged.
In these workflows, it is preferable to immediately move a jira to state "verified", once the PR is merged.
A user should be able to write a comment or add a label that causes octobot to verify tickets that would normally be moved to resolved state when the PR is merged.
Right now version scripts fail without any notification to slack why it failed, which makes it very difficult to debug.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.