Skip to content

Commit

Permalink
Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
zaaakher committed Jun 25, 2024
0 parents commit 86694c3
Show file tree
Hide file tree
Showing 6 changed files with 277 additions and 0 deletions.
12 changes: 12 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# http:https://editorconfig.org
root = true

[*]
indent_style = tab
end_of_line = lf
charset = utf-8
trim_trailing_whitespace = true
insert_final_newline = true

[*.yml]
indent_style = space
172 changes: 172 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
# Logs

logs
_.log
npm-debug.log_
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*

# Diagnostic reports (https://nodejs.org/api/report.html)

report.[0-9]_.[0-9]_.[0-9]_.[0-9]_.json

# Runtime data

pids
_.pid
_.seed
\*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover

lib-cov

# Coverage directory used by tools like istanbul

coverage
\*.lcov

# nyc test coverage

.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)

.grunt

# Bower dependency directory (https://bower.io/)

bower_components

# node-waf configuration

.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)

build/Release

# Dependency directories

node_modules/
jspm_packages/

# Snowpack dependency directory (https://snowpack.dev/)

web_modules/

# TypeScript cache

\*.tsbuildinfo

# Optional npm cache directory

.npm

# Optional eslint cache

.eslintcache

# Optional stylelint cache

.stylelintcache

# Microbundle cache

.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/

# Optional REPL history

.node_repl_history

# Output of 'npm pack'

\*.tgz

# Yarn Integrity file

.yarn-integrity

# dotenv environment variable files

.env
.env.development.local
.env.test.local
.env.production.local
.env.local

# parcel-bundler cache (https://parceljs.org/)

.cache
.parcel-cache

# Next.js build output

.next
out

# Nuxt.js build / generate output

.nuxt
dist

# Gatsby files

.cache/

# Comment in the public line in if your project uses Gatsby and not Next.js

# https://nextjs.org/blog/next-9-1#public-directory-support

# public

# vuepress build output

.vuepress/dist

# vuepress v2.x temp and cache directory

.temp
.cache

# Docusaurus cache and generated files

.docusaurus

# Serverless directories

.serverless/

# FuseBox cache

.fusebox/

# DynamoDB Local files

.dynamodb/

# TernJS port file

.tern-port

# Stores VSCode versions used for testing VSCode extensions

.vscode-test

# yarn v2

.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.\*

# wrangler project

.dev.vars
.wrangler/
6 changes: 6 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"printWidth": 140,
"singleQuote": true,
"semi": true,
"useTabs": true
}
13 changes: 13 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
{
"name": "track-releases",
"version": "0.1.0",
"private": true,
"scripts": {
"deploy": "wrangler deploy",
"dev": "wrangler dev",
"start": "wrangler dev"
},
"devDependencies": {
"wrangler": "^3.60.3"
}
}
60 changes: 60 additions & 0 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
// GitHub API base URL
const GITHUB_API = 'https://api.github.com/repos/';

async function checkForNewReleases(env) {
// Array of GitHub repositories to monitor
const repositories = [
'vercel/next.js',
// Add more repositories as needed
];

// Fetch latest releases for all repositories
for (const repo of repositories) {
const response = await fetch(`${GITHUB_API}${repo}/releases/latest`, {
headers: {
Accept: 'application/vnd.github.v3+json',
'User-Agent': 'Cloudflare-Worker',
},
});

if (response.ok) {
const release = await response.json();
const latestVersion = release.tag_name;

// Check if we have a new release
const lastKnownVersion = await env.REPO_VERSIONS.get(repo);
if (latestVersion !== lastKnownVersion) {
// Update KV store with the new version
await env.REPO_VERSIONS.put(repo, latestVersion);

// Send message to Discord
await sendDiscordNotification(env, repo, release);
}
}
}
}

async function sendDiscordNotification(env, repo, release) {
const message = {
content: `New release for ${repo}: ${release.name} (${release.tag_name})\n${release.html_url}`,
};

await fetch(env.DISCORD_WEBHOOK_URL, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(message),
});
}

export default {
async fetch(request, env) {
// This can be used for manual triggers or other HTTP requests
// await checkForNewReleases(env);
return new Response('OK', { status: 200 });
},
async scheduled(event, env, ctx) {
// This function is triggered by cron schedules
await checkForNewReleases(env);
ctx.waitUntil(event);
},
};
14 changes: 14 additions & 0 deletions wrangler.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name = "track-releases"
main = "src/index.js"
compatibility_date = "2024-06-25"
workers_dev = true
kv_namespaces = [
{ binding = "REPO_VERSIONS", id = "<YOUR_KV_HERE>" }
]

[vars]
DISCORD_WEBHOOK_URL = <YOUR_WEBHOOK_HERE>

[triggers]
crons = [ "*/1 * * * *" ]

0 comments on commit 86694c3

Please sign in to comment.