Easy Agile spent two weeks putting together a Jira Forge app for Codegeist and we would like to share some of our challenges and feedback.
We like the “hosted for you” approach of Forge to potentially help us spin up new apps quicker in the future and the potential to integrate into many different aspects of Jira with modules.
We used the Custom UI for this app, making use of exclusively the jira:projectPage
module.
We are very much still learning all of what forge can do so some of these challenges may already have solutions which we would be grateful for being pointed in the right direction.
Here are some challenges we had along the way:
/graphql endpoints appeared to be slow
We experienced slow requests for functions like invoke and requestJira on the frontend of our Custom UI app. Both of these seemed to trigger a /graphql request.
On that note, using rest endpoints with requestJira which then triggers a /graphql network request seemed confusing as developers.
Unable to use /rest/agile/1.0 endpoints
We had ideas that required sprint data but were unable to access sprint data due to the endpoints not being available from Forge.
No concept of a current board
Within Connect apps we are able to get the current board and use it to change the state of the app. We couldn’t seem to find a way to do the same thing within Forge. To build our app we instead used a project page.
Two of our apps on the marketplace are reliant on boardId to function, so if we were to port them to forge in the future this may be a blocker for us.
No post-install hook
We wanted to set up our forge app with some initial data (which we stored with the storage API). We saw that there we scheduled triggers but we didn’t find out how to trigger an event once on install.
iframe height changes
While building the forge app we experience a problem documented here. Where our app suddenly had no height, we suspect something changed to how the iframe height was calculated. We would like to be able to create apps (project page) that take up the full height of the available space e.g height: calc(100vh - ${header})
.
We were also confused why this change appeared because we had not updated any of the forge npm packages and did not see changes listed within the changelog.
Want the ability to show toast messages
We had ideas around showing messages to users once they complete certain criteria which we track through webhook issue events. We would like to be able to show toast messages to users regardless of where they are within Jira.
10 requests per second for storage is too limited
Our app accesses the storage API after responding to a webhook for issue events. On large Jira instances where many users are making lots of changes to issues (or even a single user doing a bulk update, which we were able to trigger and see problems) we suspect that we are going to run into problems with using the storage API.
Web trigger responses
When using Web-Triggers, we always got a 424 status code and were unable to return any content to the caller. To authenticate with Slack we had to open a new browser tab and direct the user to Slack with a redirect back to the web-trigger URL to complete the authorization process. We were able to get the authentication working, but the response from the web trigger to the browser was always a ‘424 Failed Dependency’ and no content was returned. This meant that the new tab ended in a blank view. We tried wrapping the call in a try/catch as per the documentation but this also did not work.
Typescript Context Type missing properties
When trying to extract the extension from the context, we noticed that the extension type was not typed on the FullContext
type. In the forge bridge out int the types.d.ts, the FullContext
is typed as export declare type FullContext = {};
For development can’t set permissions of non-HTTPS resources
Can’t set permissions for non-HTTPS localhost servers without using *
(as far as I’ve seen, not sure if *localhost
works.)
To get around this we used ngrok to forward local resources during development.