Skip to content

[blog] Top Albums 2025 #45

[blog] Top Albums 2025

[blog] Top Albums 2025 #45

Workflow file for this run

name: blog-post-release
on:
pull_request:
branches: [ main ]
types: [ opened, edited, closed, reopened ]
jobs:
announce:
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v4
with:
node-version: '20.x'
- run: npm install js-yaml
- uses: actions/github-script@v8
with:
github-token: ${{secrets.GITHUB_TOKEN}}
script: |
const yaml = require("js-yaml");
const pr = context.payload.pull_request;
if (pr.state !== "open" && pr.merged_at === null) {
console.log("pr was not merged, skipping");
return;
}
let urlBase = "https://kylemtravis.com/blog";
if (pr.state === "open")
urlBase = `https://deploy-preview-${pr.number}--kylemtravis.netlify.app/blog`;
const result = await github.rest.pulls.listFiles({
pull_number: pr.number,
owner: context.repo.owner,
repo: context.repo.repo,
});
const added = result.data.filter(f => f.status === "added");
const newBlogPosts = added.filter(f => f.filename.match(/src\/blog\//) !== null);
if (newBlogPosts.length < 1)
return;
const [_div, metaString, _rest] = newBlogPosts[0].patch.split('---', 3);
const meta = yaml.load(metaString);
const releaseName = meta['name'];
const slug = meta['slug'] || releaseName.toLowerCase().replace(/\s+/g, "-").replace(/[^a-zA-Z0-9\-]/g, "");
const rel = {
owner: context.repo.owner,
repo: context.repo.repo,
tag_name: `blog-pr-${pr.number}`,
target_commitish: pr.head.sha,
name: `[Blog Post] ${releaseName}`,
body: `New blog post, read it [here](${urlBase}/${slug})!`,
draft: pr.state === "open",
};
const rels = await github.rest.repos.listReleases({
owner: context.repo.owner,
repo: context.repo.repo,
});
const found = rels.data.filter(r => r.draft && r.tag_name == rel.tag_name);
await (found.length > 1 ?
github.rest.repos.updateRelease({
release_id: found[0].id,
...rel
}) :
github.rest.repos.createRelease(rel)
);