Internal.io

Published: Mar 17, 2023 by Isaac Johnson

Internal.io is a low-code/no-code internal tooling site aimed at Developers, Ops, SRE, DevSecOps; anyone looking to make quick internal integrations and reports.

I cannot recall where I heard about them; likely TLDR or The Morning Brew. Regardless, it was in my notebook of “Hey, I should check that out”.

I won’t cover pricing today, but essentially there is a “Starter” free tier and everything below is done within the Starter/Free tier.

Account creation

Sign up from the homepage

/content/images/2023/03/internalio-01.png

Then we can use a gmail (maybe)

/content/images/2023/03/internalio-02.png

I ended up having to use a different email to signup

/content/images/2023/03/internalio-03.png

I’ll pick sheets

/content/images/2023/03/internalio-04.png

Then I’ll connect

/content/images/2023/03/internalio-05.png

And pick a sheet I created

/content/images/2023/03/internalio-06.png

Then we can create a new Space

/content/images/2023/03/internalio-07.png

I created a pipeline automation

/content/images/2023/03/internalio-10.png

Now I can add an action to insert a row

/content/images/2023/03/internalio-11.png

I’ll configure some fields. Here I have a sheet totally scores for kids in a class.

/content/images/2023/03/internalio-12.png

Let’s run now to test

/content/images/2023/03/internalio-13.png

After clicking Run Now

/content/images/2023/03/internalio-14.png

I can now see the run completed

/content/images/2023/03/internalio-15.png

I see it did something

/content/images/2023/03/internalio-16.png

I’ll try some hardcoded values

/content/images/2023/03/internalio-17.png

And that worked better

/content/images/2023/03/internalio-18.png

Github Integration

I went through the steps to create a Github App.

However, any test to use it gave me a graphql error.

/content/images/2023/03/internalio-38.png

Nothing was documented in what permissions were needed so I’ll wait for better docs before I try again.

The idea is that you can sync your Workspace to Github for history, as best I can tell. You cannot use the Github connection as a Data Source (as I had hoped).

That said, let’s use the REST Endpoint for Github to fetch issues and show them.

We’ll first verify we can fetch them locally with a PAT

$ curl -L -H "Accept: application/vnd.github+json" -H "Authorization: Bearer `getpass.sh GHRunnerPAT idjakv | tr -d '\n'`" -H "X-GitHub-Api-Version: 2022-11-28"  https://api.github.com/issues
[
  {
    "url": "https://api.github.com/repos/idjohnson/ThinkAhead-CODE-Example/issues/1",
    "repository_url": "https://api.github.com/repos/idjohnson/ThinkAhead-CODE-Example",
    "labels_url": "https://api.github.com/repos/idjohnson/ThinkAhead-CODE-Example/issues/1/labels{/name}",
    "comments_url": "https://api.github.com/repos/idjohnson/ThinkAhead-CODE-Example/issues/1/comments",
    "events_url": "https://api.github.com/repos/idjohnson/ThinkAhead-CODE-Example/issues/1/events",
    "html_url": "https://github.com/idjohnson/ThinkAhead-CODE-Example/issues/1",
    "id": 410778317,
    "node_id": "MDU6SXNzdWU0MTA3NzgzMTc=",
    "number": 1,
    "title": "example issue",
    "user": {
      "login": "idjohnson",
      "id": 6699477,
      "node_id": "MDQ6VXNlcjY2OTk0Nzc=",
      "avatar_url": "https://avatars.githubusercontent.com/u/6699477?v=4",
... snip ... 

Let’s replicate that in Internal.io using the HTTP Data Source

HTTP Data Source

Add a Data Source

/content/images/2023/03/internalio-20.png

Then choose HTTP

/content/images/2023/03/internalio-21.png

We can then add the same fields and give the endpoint a name

/content/images/2023/03/internalio-22.png

I can now select it in my Data Sources, then choose Functions and click “Add”

/content/images/2023/03/internalio-23.png

To start, I’ll leave the defaults, but choose to “Run Function” to see the results located in the data area

/content/images/2023/03/internalio-24.png

Function Transformers

Now, let’s say we wish to map some of the returned values to a more simple structure

We can use the “Response Transformer”

data.map(e => {
  return {
      user: e.user.login,
      title: e.title,
      url: e.url
  }
})

To turn

/content/images/2023/03/internalio-25.png

into

/content/images/2023/03/internalio-26.png

I’ll give this function a name (SubsetResults) and save it

/content/images/2023/03/internalio-27.png

I’ll now create a new “Space”

/content/images/2023/03/internalio-28.png

We can give the Space a nice title and add a Table Component

/content/images/2023/03/internalio-29.png

I realized I neglected to add outputs when I created the function, thus the table showed that the component returned no data.

/content/images/2023/03/internalio-30.png

I’ll edit the function and add the outputs for the fields we are mapping

/content/images/2023/03/internalio-31.png

I can now see results when I create the table in the Space

/content/images/2023/03/internalio-32.png

Now I just need to Publish it

/content/images/2023/03/internalio-33.png

When looking at my Spaces, I can now see the new Space I created

/content/images/2023/03/internalio-34.png

And, of course, I can view it

/content/images/2023/03/internalio-35.png

One thing I realized was that I used the “url” instead of “html_url”.

I can quickly correct the function transformer and save

/content/images/2023/03/internalio-36.png

Now my report looks right

/content/images/2023/03/internalio-37.png

Lastly, I think I’ll give the Space a description and decent Icon

/content/images/2023/03/internalio-38.png

To make it easier to identify

/content/images/2023/03/internalio-40.png

Summary

I just scratched the surface with Internal.io. There is so much more we can do with it and I plan to do a follow-up soon.

Today we covered account setup, creating a link to a Google sheet and updating rows with an Automation. We then created a new HTTP data source to pull from Github’s REST API and then transform the data with a function transformer. Lastly, we made a new Space and showed our results in a dynamically populated table.

Internalio nocode github

Have something to add? Feedback? You can use the feedback form

Isaac Johnson

Isaac Johnson

Cloud Solutions Architect

Isaac is a CSA and DevOps engineer who focuses on cloud migrations and devops processes. He also is a dad to three wonderful daughters (hence the references to Princess King sprinkled throughout the blog).

Theme built by C.S. Rhymes