all: remove Cloudflare Workers functionality

This commit is contained in:
Harsh Shandilya 2022-10-08 20:13:40 +05:30
parent 10708ab642
commit 6685ec3c44
10 changed files with 8 additions and 316 deletions

25
.github/renovate.json vendored
View File

@ -6,26 +6,6 @@
"github>msfjarvis/shared-workflows//renovate/automerge"
],
"packageRules": [
{
"managers": [
"github-actions"
],
"packagePatterns": [
"^cloudflare/wrangler-action"
],
"enabled": false
},
{
"managers": [
"npm"
],
"packagePatterns": [
"^source-map-loader",
"^ts-loader",
"^webpack"
],
"enabled": false
},
{
"packageNames": ["gohugoio/hugo"],
"extractVersion": "^v(?<version>\\d+\\.\\d+\\.\\d+)"
@ -34,10 +14,7 @@
"regexManagers": [
{
"description": "Update Hugo version in Actions workflows",
"fileMatch": [
".yml$",
".toml$"
],
"fileMatch": [".yml$", ".toml$"],
"matchStrings": [
"hugo-version: '(?<currentValue>.*?)'",
"HUGO_VERSION = \"(?<currentValue>.*?)\""

View File

@ -1,4 +1,4 @@
name: Build worker and website
name: Build website
on:
push:
@ -27,5 +27,3 @@ jobs:
shell: bash
run: |
hugo --minify --gc
yarn install
yarn run build

View File

@ -1,86 +0,0 @@
name: Deploy to Cloudflare Workers Sites
on:
push:
branches:
- main
workflow_dispatch:
inputs:
environment:
description: "Environment to deploy built site to"
required: true
type: "string"
jobs:
deploy-main:
if: "contains(github.event.head_commit.message, '[deploy]') || github.event.inputs.environment == '[deploy]'"
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Setup Latest Version of Hugo
uses: peaceiris/actions-hugo@c03b5dbed22245418539b65eb9a3b1d5fdd9a0a6 # tag=v2
with:
hugo-version: '0.104.3'
extended: true
- uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3
with:
go-version-file: 'go.mod'
- name: Build Hugo Site
shell: bash
run: |
yarn install
hugo --minify --gc
- name: Publish to Cloudflare Workers Sites
uses: cloudflare/wrangler-action@2.0.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
command: publish --env production
env:
CF_ZONE_ID: ${{ secrets.CF_ZONE_ID }}
- name: Notify search engines of sitemap updates
shell: bash
run: |
SITEMAP_URL="https://msfjarvis.dev/sitemap.xml"
curl "https://google.com/ping?sitemap=${SITEMAP_URL}"
curl "https://www.bing.com/ping?sitemap=${SITEMAP_URL}"
deploy-staging:
if: "contains(github.event.head_commit.message, '[staging]') || github.event.inputs.environment == '[staging]'"
runs-on: ubuntu-latest
steps:
- name: Checkout source
uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3
- name: Setup Latest Version of Hugo
uses: peaceiris/actions-hugo@c03b5dbed22245418539b65eb9a3b1d5fdd9a0a6 # tag=v2
with:
hugo-version: '0.104.3'
extended: true
- uses: actions/setup-go@268d8c0ca0432bb2cf416faae41297df9d262d7f # tag=v3
with:
go-version-file: 'go.mod'
- name: Build Hugo Site
shell: bash
run: |
yarn install
hugo --minify --gc -D --baseUrl 'https://drafts.msfjarvis.dev/'
- name: Publish to Cloudflare Workers Sites
uses: cloudflare/wrangler-action@2.0.0
with:
apiToken: ${{ secrets.CF_API_TOKEN }}
accountId: ${{ secrets.CF_ACCOUNT_ID }}
command: publish
env:
CF_ZONE_ID: ${{ secrets.CF_ZONE_ID }}

View File

@ -1,27 +1,14 @@
{
"name": "redirekt",
"name": "msfjarvis.dev",
"version": "1.0.0",
"description": "Cloudflare Worker to do simple redirects to GitHub",
"repository": "https://github.com/msfjarvis/redirekt",
"description": "My blog and home page",
"repository": "https://github.com/msfjarvis/msfjarvis.dev",
"main": "index.js",
"scripts": {
"build": "webpack",
"dev": "NODE_ENV=development yarn run build",
"format": "prettier --write '**/*.{ts,js,css,json,md}' --ignore-path .gitignore"
"build": "hugo",
"dev": "hugo serve"
},
"author": "Harsh Shandilya <me@msfjarvis.dev>",
"license": "MIT OR Apache-2.0",
"devDependencies": {
"@cloudflare/workers-types": "3.16.0",
"prettier": "2.7.1",
"source-map-loader": "4.0.0",
"source-map-support": "0.5.21",
"ts-loader": "9.3.1",
"typescript": "4.8.4",
"webpack": "5.74.0",
"webpack-cli": "4.10.0"
},
"dependencies": {
"@cloudflare/kv-asset-handler": "0.2.0"
}
"dependencies": {}
}

View File

@ -8,6 +8,5 @@ pkgs.mkShell {
imagemagick
nodejs-16_x
wrangler
yarn
];
}

View File

@ -1,30 +0,0 @@
const path = require("path");
const webpack = require("webpack");
const mode = process.env.NODE_ENV || "production";
module.exports = {
entry: "./workers-site/src",
output: {
filename: `worker.${mode}.js`,
path: path.join(__dirname, "dist"),
},
devtool: "source-map",
mode,
resolve: {
extensions: [".ts", ".tsx", ".js"],
plugins: [],
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: "ts-loader",
options: {
transpileOnly: true,
},
},
{ enforce: "pre", test: /\.js$/, loader: "source-map-loader" },
],
},
};

View File

@ -1,6 +0,0 @@
export {};
declare global {
const BASE_URL: string;
const NAMESPACE: KVNamespace;
}

View File

@ -1,117 +0,0 @@
import { getAssetFromKV } from "@cloudflare/kv-asset-handler";
const GITHUB_USERNAME = "msfjarvis";
const APS_SLUG = "Android-Password-Store";
const GITHUB_URL = `https://github.com`;
const MY_GITHUB = `${GITHUB_URL}/${GITHUB_USERNAME}`;
const APS_GITHUB_URL = `https://github.com/${APS_SLUG}/${APS_SLUG}`;
const CSP_POLICY =
"base-uri 'self'; connect-src 'self' insights.msfjarvis.dev utteranc.es; default-src 'self'; frame-src asciinema.org github.com platform.twitter.com utteranc.es; font-src 'self' fonts.gstatic.com; img-src 'self' data: gfycat.com imgur.com *.imgur.com insights.msfjarvis.dev syndication.twitter.com; object-src 'none'; script-src 'self' 'unsafe-hashes' asciinema.org platform.twitter.com utteranc.es insights.msfjarvis.dev 'sha256-/nV291Na1MuGRmAF5BCX/72e5aDh6O5wnlvisox+3Ts=' 'sha256-X5avg43RTxt2cSum+E3xICbowEMaOBxeBiNh05CXDTY=' 'sha256-z2izUJPvGYTnFTpFb7prEv2Soyt9qIS/B/aWU80v7As=' 'sha256-SW7YuU+FYIfxpDhNx/ozt2nByUOZMoJbUGRVtb9JMLc=' 'sha256-eyUVosQAviXm2qeOTG819D1n0kSst2gY8VmfgVsZlag='; style-src 'self' fonts.googleapis.com 'unsafe-inline'; frame-ancestors 'self';";
const PERMISSIONS_POLICY =
"accelerometer=(), autoplay=(), camera=(), encrypted-media=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), midi=(), payment=(), picture-in-picture=(), sync-xhr=(), usb=()";
export async function handleRequest(event: FetchEvent): Promise<Response> {
return redirectGitHub(event);
}
async function getPageFromKV(event: FetchEvent): Promise<Response> {
const options = {};
try {
const page = await getAssetFromKV(event, options);
if (page === null) {
throw new Error("No page found, short-circuit to 404 page");
}
const response = new Response(page.body, page);
response.headers.set("X-XSS-Protection", "1; mode=block");
response.headers.set("X-Content-Type-Options", "nosniff");
response.headers.set("X-Frame-Options", "DENY");
response.headers.set("Referrer-Policy", "no-referrer-when-downgrade");
response.headers.set("Content-Security-Policy", CSP_POLICY);
response.headers.set("Permissions-Policy", PERMISSIONS_POLICY);
const url = event.request.url;
if (url.endsWith("css") || url.endsWith("js") || url.endsWith("ttf")) {
response.headers.set("Cache-Control", "public, max-age=31536000");
}
return response;
} catch (e: unknown) {
try {
let notFoundResponse = await getAssetFromKV(event, {
mapRequestToAsset: (req) =>
new Request(`${new URL(req.url).origin}/404.html`, req),
});
return new Response(notFoundResponse.body, {
...notFoundResponse,
status: 404,
});
} catch (e) {}
if (e instanceof Error) {
return new Response(e.message || e.toString(), { status: 500 });
}
}
return new Response("Failed to load page", { status: 500 });
}
async function recordStatsAndRedirect(url: string): Promise<Response> {
const key = `stats_${url}`;
var _count = await NAMESPACE.get(key);
if (_count == null) {
_count = "0";
}
var count = parseInt(_count);
count += 1;
await NAMESPACE.put(key, `${count}`);
return Response.redirect(url, 301);
}
async function redirectGitHub(event: FetchEvent): Promise<Response> {
const urlParts = event.request.url.replace(BASE_URL, "").split("/");
switch (urlParts[0]) {
case "g":
switch (urlParts.length) {
case 1:
return recordStatsAndRedirect(MY_GITHUB);
case 2:
return recordStatsAndRedirect(`${MY_GITHUB}/${urlParts[1]}`);
case 3:
return recordStatsAndRedirect(
`${MY_GITHUB}/${urlParts[1]}/commit/${urlParts[2]}`
);
case 4:
return recordStatsAndRedirect(
`${MY_GITHUB}/${urlParts[1]}/issues/${urlParts[3]}`
);
}
case "aps":
switch (urlParts.length) {
case 1:
return recordStatsAndRedirect(APS_GITHUB_URL);
case 2:
return recordStatsAndRedirect(
`${APS_GITHUB_URL}/commit/${urlParts[1]}`
);
case 3:
return recordStatsAndRedirect(
`${APS_GITHUB_URL}/issues/${urlParts[2]}`
);
}
case "apsg":
switch (urlParts.length) {
case 1:
return recordStatsAndRedirect(`${GITHUB_URL}/${APS_SLUG}`);
case 2:
return recordStatsAndRedirect(
`${GITHUB_URL}/${APS_SLUG}/${urlParts[1]}`
);
case 3:
return recordStatsAndRedirect(
`${GITHUB_URL}/${APS_SLUG}/${urlParts[1]}/commit/${urlParts[2]}`
);
case 4:
return recordStatsAndRedirect(
`${GITHUB_URL}/${APS_SLUG}/${urlParts[1]}/issues/${urlParts[3]}`
);
}
default:
return getPageFromKV(event);
}
}

View File

@ -1,7 +0,0 @@
import { handleRequest } from "./handler";
addEventListener("fetch", (event) => {
if (event instanceof FetchEvent) {
event.respondWith(handleRequest(event));
}
});

View File

@ -1,23 +0,0 @@
name = "msfjarvis-dev-staging"
workers_dev = false
route = "drafts.msfjarvis.dev/*"
vars = { BASE_URL = "https://drafts.msfjarvis.dev/" }
compatibility_date = "2021-11-08"
kv_namespaces = [
{ binding = "NAMESPACE", id = "43d755465f4642ccb30b1bdce031d1da", preview_id = "d2c0bff9f5584c938131063c9a702611" },
]
main = "dist/worker.production.js"
[build]
command = "yarn run build"
[site]
bucket = "./public"
[env.production]
name = "msfjarvis-dev-prod"
route = "msfjarvis.dev/*"
vars = { BASE_URL = "https://msfjarvis.dev/" }
kv_namespaces = [
{ binding = "NAMESPACE", id = "303799a857b0490482dabaf6c9ed0af8" }
]