Automated Dependency updates to be sent to the devs after some time

Last year, i began some work on a module that would basically be responsible with reporting any available releases in our maven dependencies used in core and supported modules, I stopped at the interfacing level of the module after getting an idea on one of the developer forums of instead writing a script to handle this, This was simpler and required less efforts so i looked forward to when i would have some time to write one. Am pleased that today, i have began figuring out how i will get the script up and running pretty as expected and would be pleased to have your thoughts on some of these thoughts.

One issue that am figuring out yet is, how would you people love to get the updates to the developer’s community, before i thought of using email, unfortunately; we are moving away from group mails which would then be a better way to perform the automation to write to us, the script would run on our demo servers to keep us up-to date with updates every after some time. but which else besides email?

Your thoughts would be better in establishing how you expect this to work out, probably writing to Michael who would publish it but this would still require a middle man which i wanted to avoid. Am not sure if it would be possible but probably like set-up an email account that forwards and creates a post inside the developer’s category! :smile:

Who, specifically? Module owners/maintainers as listed in the modules directory? People working on code in GitHub repositories named openmrs-modules-*? A wider group?

Knowing the audience will help to determine the best method to contact that audience.

1 Like

Does OpenMRS Talk have an API ?

Yes, it does, although it is still poorly documented and under rapid change as it’s developed:

@sunbiz has been working with it in developing code to handle automatic granting of /dev/1 and /dev/2 badges for developer stages.

1 Like

@k_joseph could you give a better explanation of the benefit you are hoping to provide (and as Michael says, to whom you’re trying to provide it)?

It might help you clarify things to phrase this as a user story, e.g. “As a module owner, I want to be notified… so that…”.

It would definitely help me answer, if you can give examples of the sort of information you’re hoping to provide. E.g. I see that the reporting module is using quartz-scheduler 2.1.1, and that the latest in that line is 2.1.7, and the very latest is 2.2.1. Are you suggesting that you’d have an scheduled script to notify @mseaton about this? Or to tell the whole OpenMRS community? How much benefit is there to him knowing this, if the current version of quartz is running just fine for the functionality it is used for? Etc.

openmrs developers, people overseeing code, module owners/developers and maintainers, are the ones i plan to see the dependency updates

@darius, that describes exactly what i hope to provide with this script, generating and sending notification to module developer’s or openmrs-core developer something that looks like:

Instead of notifications each time something changes, how about a web page that shows the current state of dependencies?

  • Available updates could be a link to information about that library version.
  • Users could filter to only those rows relevant to specific module(s).
  • Disparities of ≥1 major version could be highlighted.
2 Likes

A web page would make this more better and useful indeed, where do you expect such a webpage to be running/accessed from @burke? talk or some where else!

It doesn’t really matter. If built as a docker container, it could be deployed anywhere. :smile:

1 Like

Am quite not familiar with docker though i have tried to peruse through it tonight, i did not get how i need to use in this case! Do i need to build such as a normal separate app probably on one of the common frameworks such as spring, grails et-cetera and docker will do the rest at the server level! what’s it exactly about?

Don’t let my Docker comment slow you down. It’s just a way of wrapping up an application within a linux environment (much like a lightweight virtual machine) so it’s easy to move around and administer. You could create a simple docker container that uses, for example, nginx+PHP+sqlite to serve up your dependencies page and runs a cron job to keep itself updated. There a tutorial if you’re interested in learning more.

2 Likes

I know how silly it sounds, but I had really good experiences running scripts from Bamboo creating a simple HTML as artifact. For those fancy times, we went with updating Confluence pages from Bamboo (using https://developer.atlassian.com/confdev/confluence-rest-api/confluence-xml-rpc-and-soap-apis). Now it’s supposed to offer REST too, it should be even simpler to call from a bash/python script.

2 Likes

Not silly at all because that’s how we do our Javadocs. Of course the question is what type of script/tool to create the HTML.

It might be nice if the Bamboo plan was only considered “successful” (or maybe “failed”?) and updated the page if (and only if) there were updates. That way people could add themselves to the Bamboo notifications when that happened and get an email notification.

Well, I have this:

https://ci.openmrs.org/browse/REFAPP-OPUP-JOB1-8/test https://ci.openmrs.org/artifact/REFAPP-OPUP/JOB1/build-8/Reports/target/opup-report.html

It’s a maven plugin, open sourced ( https://bitbucket.org/jwalton/opup/src/e59ad1c8e103?at=master), I tested it on the reference application and it looks like it works as expected. For each library that could be upgraded, it generates a test failure. It can be ignored with the ‘quarantine’ Bamboo feature (the cog close to the test result itself), or even linked to a JIRA issue. Notifications are sent as usual.

The second task of the job is just a workaroud to get a plugin from another nexus instance. There are several better options, like changing the agents’ settings file, but I’m just showing a proof of concept.

Am working towards coding this out soon, i just wrote to know how i can keep track of the changes in github remote repositories so as to execute commands as done on CI/bamboo servers! I plan to keep a public data json file such as https://github.com/k-joseph/openmrs-contrib-dependecyupdates/blob/master/data.json from which people can add their projects, the project would then run a maven dependency updates command and then pick the updates details from the script, and then include a php display script that would support user updates subscriptions etc.

Can i know in the first place;

  1. How is reading content of raw github files content done?
  2. And then how is keeping watch for updates to such remote repositories done on our bamboo servers?

Hoping to hear from the community most especially, @michael, @surangak, @cintiadr, @darius, @burke etc!