GitHub
A Wing library for working with GitHub Probot
Prerequisites
Installation
sh npm i @winglibs/github 
Usage
This following application is a simple GitHub application that listens to created and reopened
pull requests, look for any *.md files that where changed and replace their content with their
uppercase version.
- It requires a GitHub application
- Configured secrets
In order to start you need to create a GitHub application:
Create a GitHub App
- Goto https://github.com/settings/apps
- Click "New GitHub App" and complete form
- GitHub App Name
- Homepage URL: e.g. https://winglang.io
- Webhook:
- Active: ✅
- URL: http://this-will-change-automatically.com
- Webhook secret: "this-is-a-bad-secret"
 
- Permissions -> Repository permissions:
- Contents: Read and write
- Pull requests: Read and write
 
- Subscribe to events
- Pull request
- Push
 
- Save
- Notice the app id and save it
- Generate & download a private key for the app
main.w
When running on the simulator, the Webhook URL will automatically update on every simulator run.
bring util;
bring cloud;
bring github;
bring fs;
let uppercaseAllMarkdownFiles = inflight (ctx) => {
  let repo = ctx.payload.repository;
  // find all changed mdfiles by comparing the commits of the PR
  let compare = ctx.octokit.repos.compareCommits(
    owner: repo.owner.login,
    repo: repo.name,
    base: ctx.payload.pull_request.base.sha,
    head: ctx.payload.pull_request.head.sha,
  );
  let mdFiles = MutMap<str>{};
  for commit in compare.data.commits {
    let commitContent = ctx.octokit.repos.getCommit(
      owner: repo.owner.login,
      repo: repo.name,
      ref: ctx.payload.pull_request.head.ref,
    );
    if let files = commitContent.data.files {
      for file in files {
        if file.filename.endsWith(".md") &&
         (file.status == "modified" || file.status == "added" || file.status == "changed") {
          mdFiles.set(file.filename, file.sha);
        }
      }
    }
  }
  // list over mdfiles and update them
  for filename in mdFiles.keys() {
    let contents = ctx.octokit.repos.getContent(
      owner: repo.owner.login,
      repo: repo.name,
      path: filename,
      ref: ctx.payload.pull_request.head.sha
    );
    
    let fileContents = util.base64Decode("{contents.data.content}");
      
    ctx.octokit.repos.createOrUpdateFileContents(
      owner: repo.owner.login,
      repo: repo.name,
      branch: ctx.payload.pull_request.head.ref,
      sha: contents.data.sha,
      path: filename,
      message: "uppercase {filename}",
      content: util.base64Encode(fileContents.uppercase())
    );    
  }
};
class SimpleCredentialsSupplier impl github.IProbotAppCredentialsSupplier {
   
   pub inflight getId(): str {
    return "app id";
   }
   pub inflight getWebhookSecret(): str {
    return "this-is-a-bad-secret";
   }
   pub inflight getPrivateKey(): str {
    return fs.readFile("/path/to/private-key.pem");
   }
}
let credentialsSupplier = new SimpleCredentialsSupplier();
let markdown = new github.ProbotApp(
  credentialsSupplier: credentialsSupplier,
  onPullRequestOpened: handler,
  onPullRequestReopened: handler
);
License
This library is licensed under the MIT License.
API Reference
Table of Contents
- Classes
- Interfaces
- Structs
- ProbotAppProps
- simutils.ServiceProps
- probot.Context
- probot.ProbotInstance
- probot.PullRequestClosedContext
- probot.PullRequestContext
- probot.PullRequestOpenedContext
- probot.PullRequestSyncContext
- probot.PushContext
- probot.VerifyAndReceieveProps
- probot.CreateAdapterOptions
- probot.ProbotAdapterProps
- octokit.CompareCommitsProps
- octokit.CompareCommitsResponse
- octokit.CompareCommitsResponseCommit
- octokit.CompareCommitsResponseData
- octokit.CompareCommitsResponseFile
- octokit.GetCommitProps
- octokit.GetCommitResponse
- octokit.GetCommitResponseData
- octokit.GetCommitResponseFile
- octokit.GetContentProps
- octokit.GetContentResponse
- octokit.GetContentResponseData
- octokit.ListReposResponse
- octokit.OctoKit
- ngrok.NgrokProps
 
ProbotApp (preflight class) 
No description
Constructor
new(props: ProbotAppProps): ProbotApp
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| static inflight createGithubAppJwt(appId: str, privateKey: str): str | No description | 
| onPullRequestOpened(handler: inflight (PullRequestOpenedContext): void): void | No description | 
| onPullRequestReopened(handler: inflight (PullRequestOpenedContext): void): void | No description | 
| inflight updateWebhookUrl(url: str): void | No description | 
utils.LowkeysMap (inflight class) 
No description
Constructor
new(): LowkeysMap
Properties
No properties
Methods
| Signature | Description | 
|---|---|
|  | No description | 
simutils.Port (preflight class) 
No description
Constructor
new(): Port
Properties
| Name | Type | Description | 
|---|---|---|
| port | str | No description | 
Methods
No methods
simutils.Service (preflight class) 
No description
Constructor
new(command: str, args: Array<str>, props: ServiceProps): Service
Properties
No properties
Methods
No methods
probot.ProbotAdapter (preflight class) 
No description
Constructor
new(props: ProbotAdapterProps): ProbotAdapter
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight auth(installationId: num): OctoKit | No description | 
| static inflight createProbotAdapter(options: CreateAdapterOptions): ProbotInstance | No description | 
| inflight handlePullRequstClosed(handler: inflight (PullRequestClosedContext): void): void | No description | 
| inflight handlePullRequstOpened(handler: inflight (PullRequestOpenedContext): void): void | No description | 
| inflight handlePullRequstReopened(handler: inflight (PullRequestOpenedContext): void): void | No description | 
| inflight handlePullRequstSync(handler: inflight (PullRequestSyncContext): void): void | No description | 
| inflight handlePush(handler: inflight (PushContext): void): void | No description | 
| inflight verifyAndReceive(props: VerifyAndReceieveProps): void | No description | 
ngrok.Ngrok (preflight class) 
No description
Constructor
new(props: NgrokProps): Ngrok
Properties
| Name | Type | Description | 
|---|---|---|
| url | str | No description | 
Methods
No methods
IProbotAppCredentialsSupplier (interface) 
No description
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight getId(): str | No description | 
| inflight getPrivateKey(): str | No description | 
| inflight getWebhookSecret(): str | No description | 
simutils.Process (interface) 
No description
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight kill(): void | No description | 
probot.IProbotAuth (interface) 
No description
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight call(instance: ProbotInstance, installationId: num): OctoKit | No description | 
probot.IProbotWebhooks (interface) 
No description
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight on(name: str, handler: inflight (): void): void | No description | 
| inflight verifyAndReceive(props: VerifyAndReceieveProps): void | No description | 
probot.IProbotAppCredentialsSupplier (interface) 
No description
Properties
No properties
Methods
| Signature | Description | 
|---|---|
| inflight getId(): str | No description | 
| inflight getPrivateKey(): str | No description | 
| inflight getWebhookSecret(): str | No description | 
ProbotAppProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| credentialsSupplier | IProbotAppCredentialsSupplier | No description | 
simutils.ServiceProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| cwd | str? | No description | 
| env |  | No description | 
probot.Context (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
probot.ProbotInstance (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| auth | IProbotAuth | No description | 
| webhooks | IProbotWebhooks | No description | 
probot.PullRequestClosedContext (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
| payload | PullRequestPayload | No description | 
probot.PullRequestContext (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
| payload | PullRequestPayload | No description | 
probot.PullRequestOpenedContext (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
| payload | PullRequestPayload | No description | 
probot.PullRequestSyncContext (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
| payload | PullRequestPayload | No description | 
probot.PushContext (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| octokit | OctoKit | No description | 
| payload | PushPayload | No description | 
probot.VerifyAndReceieveProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| id | str | No description | 
| name | str | No description | 
| payload | str | No description | 
| signature | str | No description | 
probot.CreateAdapterOptions (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| appId | str | No description | 
| privateKey | str | No description | 
| webhookSecret | str | No description | 
probot.ProbotAdapterProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| credentialsSupplier | IProbotAppCredentialsSupplier | No description | 
octokit.CompareCommitsProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| base | str | No description | 
| head | str | No description | 
| owner | str | No description | 
| repo | str | No description | 
octokit.CompareCommitsResponse (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| data | CompareCommitsResponseData | No description | 
octokit.CompareCommitsResponseCommit (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| sha | str | No description | 
octokit.CompareCommitsResponseData (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| commits |  | No description | 
octokit.CompareCommitsResponseFile (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| filaname | str | No description | 
| sha | str | No description | 
octokit.GetCommitProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| owner | str | No description | 
| ref | str | No description | 
| repo | str | No description | 
octokit.GetCommitResponse (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| data | GetCommitResponseData | No description | 
octokit.GetCommitResponseData (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| files |  | No description | 
octokit.GetCommitResponseFile (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| filename | str | No description | 
| sha | str | No description | 
| status | str | No description | 
octokit.GetContentProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| owner | str | No description | 
| path | str | No description | 
| ref | str? | No description | 
| repo | str | No description | 
octokit.GetContentResponse (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| data | GetContentResponseData | No description | 
| status | num | No description | 
octokit.GetContentResponseData (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| content | str? | No description | 
| name | str | No description | 
| path | str | No description | 
| sha | str | No description | 
| size | num | No description | 
| type | str | No description | 
octokit.ListReposResponse (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| data |  | No description | 
| status | num | No description | 
octokit.OctoKit (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| apps | OctoKitApps | No description | 
| git | OctoKitGit | No description | 
| issues | OctoKitIssues | No description | 
| pulls | OctoKitPulls | No description | 
| repos | OctoKitRepos | No description | 
ngrok.NgrokProps (struct) 
No description
Properties
| Name | Type | Description | 
|---|---|---|
| domain | str? | No description | 
| url | str | No description |