Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

CircleCICoverallsDev DependenciesDonate

cloudformation-github-sheets-sync is an AWS CloudFormation template generated using the Serverless Framework designed to pull issues from a Github repository, and sync them with a Google Docs Spreadsheet at a specified interval.

Get Started

It's simple! Click this fancy button:

Launch Stack

Then give the stack a name, and configure it:

ParameterDefault ValueDescription
UpdateSchedulecron(0/30 12-23 ? * MON-FRI *)The CloudWatch ScheduleExpression defining the interval the issues are synced at.
GithubTokenThe Github Authentication token used for fetching issues.
Repositorysammarks/cloudformation-github-sheets-syncA Github repository to sync, in the format of owner/repository
LabelsreportingA comma-separated list of labels to filter on.
BlacklistLabelsreportingA comma-separated list of labels to not include in the spreadsheet.
StateOPEN,CLOSEDA comma-separated list of states to filter on.
GoogleClientEmailYour service account's email address for Google.
GooglePrivateKeyYour service account's JSON-encoded private key for Google. Should be something like "-----BEGIN PRIVATE KEY-----\nabddfd..."
SpreadsheetIdThe spreadsheet ID to update. You can find this from the URL.
SheetNameGithub IssuesThe name of the sheet to update inside the spreadsheet.

Preparing Credentials

In order to be able to access Github and Google Sheets, you'll need to setup some credentials on their websites.

Github

All you need for Github is a developer token with access to be able to read issues for your repositories. This script doesn't write anything to Github.

Go to edit your personal access tokens, create one, and make sure it has the repo scope.

Google

This one is a little more complicated. To setup Google, follow these instructions from google-spreadsheet.

Then you're ready! Once the stack is deployed, you can inspect the CloudWatch logs of your Lambda functions to make sure they're pulling issues and updating spreadsheets properly.

Usage in Another Stack or Serverless

Add something like this underneath resources:

githubSheetsSyncStack:
Type: AWS::CloudFormation::StackProperties:
TemplateURL: https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yamlParameters:
GithubToken: ''Repository: ''# ... other parameters

You can even create multiple instances of the stack to sync multiple repositories at a time!

Note: This stack will require the CAPABILITY_AUTO_EXPAND capability when deploying the parent stack with CloudFormation. If you are using the Serverless framework, you can "trick" it into adding the required capabilities by adding this to your serverless.yaml:

resources:
Transform: 'AWS::Serverless-2016-10-31'# Trigger Serverless to add CAPABILITY_AUTO_EXPANDResources:
otherResource: # ... all of your original resources

What's deployed?

  • One Lambda function, scheduled to execute at your interval.

How does it work?

The sync Lambda goes through the following process:

  • Authenticate with Google and make sure the spreadsheet and sheet exist.
  • Fetch the latest Github issues for the repository, sorting by created date descending.
  • Clear the existing sheet.
  • Re-populate the sheet with the headers and cells generated from the issues.

Accessing Previous Versions & Upgrading

Each time a release is made in this repository, the corresponding template is available at:

https://sammarks-cf-templates.s3.amazonaws.com/github-sheets-sync/VERSION/template.yaml

On upgrading: I actually recommend you lock the template you use to a specific version. Then, if you want to update to a new version, all you have to change in your CloudFormation template is the version and AWS will automatically delete the old stack and re-create the new one for you.

Features

  • Automatically sync Github issues with Google Sheets for further refining, metadata-adding, reporting, etc.
  • No need to pay for third-party services! Just pay for the Lambda (very cheap).
  • Customize your own schedule and limited filtering.
  • Deploy with other CLoudFormation-compatible frameworks (like the Serverless framework).
  • All functionality is self-contained within one CloudFormation template. Delete the template, and all of our created resources are removed.

Why use this?

Google Sheets is a great tool for communicating Github issue progress from an engineering team to other executives. There are a lot of solutions out there for syncing Github issues, but none allow complete control over the codebase (just fork it and change what you'd like, or modify the Lambda code directly). The other solutions out there also cost money, and Lambda is cheap!

About

An AWS CloudFormation template for automatically syncing Github issues to a Google Sheet.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages