refactor: config in sub repo
This commit is contained in:
@@ -1,5 +0,0 @@
|
|||||||
VITE_BASE_URL=http://localhost:8080/
|
|
||||||
VITE_APP_TITLE=<i icon=rss></i> My Blog
|
|
||||||
VITE_APP_SIGNATURE=By <b>me</b>
|
|
||||||
VITE_APP_LANG=en
|
|
||||||
VITE_CUSTOM_HEAD=
|
|
||||||
@@ -18,12 +18,6 @@ jobs:
|
|||||||
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
|
||||||
- run: git clone ${{ vars.ARTICLES_REPOSITORY }} articles
|
- run: git clone ${{ vars.ARTICLES_REPOSITORY }} articles
|
||||||
- run: bun run build
|
- run: bun run build
|
||||||
env:
|
|
||||||
VITE_BASE_URL: ${{ vars.VITE_BASE_URL }}
|
|
||||||
VITE_APP_TITLE: ${{ vars.VITE_APP_TITLE }}
|
|
||||||
VITE_APP_SIGNATURE: ${{ vars.VITE_APP_SIGNATURE }}
|
|
||||||
VITE_APP_LANG: ${{ vars.VITE_APP_LANG }}
|
|
||||||
VITE_CUSTOM_HEAD: ${{ vars.VITE_CUSTOM_HEAD }}
|
|
||||||
- uses: actions/upload-artifact@v7
|
- uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: production-files
|
name: production-files
|
||||||
|
|||||||
@@ -4,8 +4,6 @@
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone $REPOSITORY articles
|
git clone $REPOSITORY articles
|
||||||
cp .env.example .env
|
|
||||||
$EDITOR .env
|
|
||||||
bun run build
|
bun run build
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -20,6 +18,8 @@ bun run build
|
|||||||
- [x] set page title
|
- [x] set page title
|
||||||
- [x] SPA and opengraph
|
- [x] SPA and opengraph
|
||||||
- [x] build with github actions
|
- [x] build with github actions
|
||||||
- [ ] proper docs
|
- [x] config in sub repo
|
||||||
- [ ] custom layout in sub repo ?
|
- [ ] nav bar on top
|
||||||
- [ ] link to previous/next article
|
- [ ] archive page
|
||||||
|
- [ ] link to previous/next article
|
||||||
|
- [ ] proper docs
|
||||||
+1
-1
@@ -8,7 +8,7 @@
|
|||||||
<link rel="stylesheet" type="text/css" href="/src/style.scss" />
|
<link rel="stylesheet" type="text/css" href="/src/style.scss" />
|
||||||
<meta property="og:url" content="%VITE_BASE_URL%" />
|
<meta property="og:url" content="%VITE_BASE_URL%" />
|
||||||
<meta property="og:title" content="%VITE_APP_TITLE_NO_HTML%" />
|
<meta property="og:title" content="%VITE_APP_TITLE_NO_HTML%" />
|
||||||
<link rel="alternate" href="%VITE_BASE_URL%/rss" type="application/rss+xml" title="RSS 2.0" />
|
<link rel="alternate" href="%VITE_BASE_URL%/rss.xml" type="application/rss+xml" title="RSS 2.0" />
|
||||||
<link rel="alternate" href="%VITE_BASE_URL%/atom.xml" type="application/atom+xml" title="Atom 2.0" />
|
<link rel="alternate" href="%VITE_BASE_URL%/atom.xml" type="application/atom+xml" title="Atom 2.0" />
|
||||||
<link rel="alternate" href="%VITE_BASE_URL%/feed.json" type="application/json" title="JSON Feed 1.0"/>
|
<link rel="alternate" href="%VITE_BASE_URL%/feed.json" type="application/json" title="JSON Feed 1.0"/>
|
||||||
%VITE_CUSTOM_HEAD%
|
%VITE_CUSTOM_HEAD%
|
||||||
|
|||||||
+2
-2
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "md-blog",
|
"name": "md-blog",
|
||||||
"version": "1.0.0",
|
"version": "1.1.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"repository": "https://github.com/klemek/md-blog",
|
"repository": "https://github.com/klemek/md-blog",
|
||||||
@@ -50,4 +50,4 @@
|
|||||||
"engines": {
|
"engines": {
|
||||||
"node": "^20.19.0 || >=22.12.0"
|
"node": "^20.19.0 || >=22.12.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+18
-18
@@ -1,10 +1,7 @@
|
|||||||
import fs from 'fs'
|
import fs from 'fs'
|
||||||
import process from 'process'
|
import process from 'process'
|
||||||
import { Feed } from 'feed'
|
import { Feed } from 'feed'
|
||||||
|
import articlesConfig from './articles/config.json'
|
||||||
try {
|
|
||||||
process.loadEnvFile()
|
|
||||||
} catch {}
|
|
||||||
|
|
||||||
function getFiles(dir: string): string[] {
|
function getFiles(dir: string): string[] {
|
||||||
return fs.readdirSync(dir).flatMap((name) => {
|
return fs.readdirSync(dir).flatMap((name) => {
|
||||||
@@ -49,9 +46,9 @@ function formatArticlePage(metadata: Record<string, string>, baseHtml: string):
|
|||||||
outHtml = outHtml.replace(/<.*?property="og:url".*?>/gm, '')
|
outHtml = outHtml.replace(/<.*?property="og:url".*?>/gm, '')
|
||||||
outHtml = outHtml.replace(
|
outHtml = outHtml.replace(
|
||||||
/<\/head>/gm,
|
/<\/head>/gm,
|
||||||
`<meta property="og:url" content="${process.env.VITE_BASE_URL}${metadata.path}/">\n</head>`,
|
`<meta property="og:url" content="${articlesConfig['base_url']}${metadata.path}/">\n</head>`,
|
||||||
)
|
)
|
||||||
const blog_title = process.env.VITE_APP_TITLE?.replace(/(<([^>]+)>)/gi, '').trim()
|
const blog_title = articlesConfig['title']?.replace(/(<([^>]+)>)/gi, '').trim()
|
||||||
if (metadata.title) {
|
if (metadata.title) {
|
||||||
const title = metadata.title.replace(/(<([^>]+)>)/gi, '').trim()
|
const title = metadata.title.replace(/(<([^>]+)>)/gi, '').trim()
|
||||||
outHtml = outHtml.replace(/<title>.*?<\/title>/gm, `<title>${blog_title} — ${title}</title>`)
|
outHtml = outHtml.replace(/<title>.*?<\/title>/gm, `<title>${blog_title} — ${title}</title>`)
|
||||||
@@ -70,7 +67,7 @@ function formatArticlePage(metadata: Record<string, string>, baseHtml: string):
|
|||||||
outHtml = outHtml.replace(/<.*?property="og:image".*?>/gm, '')
|
outHtml = outHtml.replace(/<.*?property="og:image".*?>/gm, '')
|
||||||
outHtml = outHtml.replace(
|
outHtml = outHtml.replace(
|
||||||
/<\/head>/gm,
|
/<\/head>/gm,
|
||||||
`<meta property="og:image" content="${metadata.thumbnail.replace('./', process.env.VITE_BASE_URL + metadata.path + '/')}">\n</head>`,
|
`<meta property="og:image" content="${metadata.thumbnail.replace('./', articlesConfig['base_url'] + metadata.path + '/')}">\n</head>`,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
return outHtml
|
return outHtml
|
||||||
@@ -81,9 +78,9 @@ function addFeedArticle(metadata: Record<string, string>, feed: Feed) {
|
|||||||
feed.addItem({
|
feed.addItem({
|
||||||
title: metadata.title.replace(/(<([^>]+)>)/gi, '').trim(),
|
title: metadata.title.replace(/(<([^>]+)>)/gi, '').trim(),
|
||||||
id: metadata.path,
|
id: metadata.path,
|
||||||
link: `${process.env.VITE_BASE_URL}${metadata.path}/`,
|
link: `${articlesConfig['base_url']}${metadata.path}/`,
|
||||||
date: new Date(Date.parse(metadata.date)),
|
date: new Date(Date.parse(metadata.date)),
|
||||||
image: metadata.thumbnail.replace('./', process.env.VITE_BASE_URL + metadata.path + '/'),
|
image: metadata.thumbnail.replace('./', articlesConfig['base_url'] + metadata.path + '/'),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,16 +98,16 @@ const metadatas = getFiles('articles')
|
|||||||
.filter((metadata) => !!metadata)
|
.filter((metadata) => !!metadata)
|
||||||
|
|
||||||
const feed = new Feed({
|
const feed = new Feed({
|
||||||
title: process.env.VITE_APP_TITLE?.replace(/(<([^>]+)>)/gi, '').trim() ?? '',
|
title: articlesConfig['title']?.replace(/(<([^>]+)>)/gi, '').trim() ?? '',
|
||||||
id: process.env.VITE_BASE_URL,
|
id: articlesConfig['base_url'],
|
||||||
link: process.env.VITE_BASE_URL,
|
link: articlesConfig['base_url'],
|
||||||
language: process.env.VITE_APP_LANG,
|
language: articlesConfig['lang'],
|
||||||
favicon: process.env.VITE_BASE_URL + '/articles/favicon.ico',
|
favicon: articlesConfig['base_url'] + 'articles/favicon.ico',
|
||||||
generator: 'md-blog',
|
generator: 'md-blog',
|
||||||
feedLinks: {
|
feedLinks: {
|
||||||
json: process.env.VITE_BASE_URL + 'feed.json',
|
json: articlesConfig['base_url'] + 'feed.json',
|
||||||
atom: process.env.VITE_BASE_URL + 'atom.xml',
|
atom: articlesConfig['base_url'] + 'atom.xml',
|
||||||
rss: process.env.VITE_BASE_URL + 'rss',
|
rss: articlesConfig['base_url'] + 'rss',
|
||||||
},
|
},
|
||||||
updated: new Date(
|
updated: new Date(
|
||||||
Math.max(
|
Math.max(
|
||||||
@@ -129,5 +126,8 @@ metadatas.forEach((metadata) => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
fs.writeFileSync('dist/feed.json', feed.json1())
|
fs.writeFileSync('dist/feed.json', feed.json1())
|
||||||
|
console.info(`Wrote dist/feed.json`)
|
||||||
fs.writeFileSync('dist/atom.xml', feed.atom1())
|
fs.writeFileSync('dist/atom.xml', feed.atom1())
|
||||||
fs.writeFileSync('dist/rss', feed.rss2())
|
console.info(`Wrote dist/atom.xml`)
|
||||||
|
fs.writeFileSync('dist/rss.xml', feed.rss2())
|
||||||
|
console.info(`Wrote dist/rss.xml`)
|
||||||
|
|||||||
+8
-4
@@ -4,14 +4,18 @@ import vue from '@vitejs/plugin-vue'
|
|||||||
import vueDevTools from 'vite-plugin-vue-devtools'
|
import vueDevTools from 'vite-plugin-vue-devtools'
|
||||||
import { plugin as mdPlugin, Mode } from 'vite-plugin-markdown'
|
import { plugin as mdPlugin, Mode } from 'vite-plugin-markdown'
|
||||||
|
|
||||||
|
import articlesConfig from './articles/config.json'
|
||||||
|
|
||||||
// https://vite.dev/config/
|
// https://vite.dev/config/
|
||||||
export default ({ mode }: { mode: string }) => {
|
export default ({ mode }: { mode: string }) => {
|
||||||
process.env = { ...process.env, ...loadEnv(mode, process.cwd()) }
|
process.env = { ...process.env, ...loadEnv(mode, process.cwd()) }
|
||||||
|
|
||||||
process.env.VITE_APP_TITLE_NO_HTML = process.env.VITE_APP_TITLE?.replace(
|
process.env.VITE_BASE_URL = articlesConfig['base_url']
|
||||||
/(<([^>]+)>)/gi,
|
process.env.VITE_APP_TITLE = articlesConfig['title']
|
||||||
'',
|
process.env.VITE_APP_TITLE_NO_HTML = articlesConfig['title'].replace(/(<([^>]+)>)/gi, '').trim()
|
||||||
).trim()
|
process.env.VITE_APP_LANG = articlesConfig['lang']
|
||||||
|
process.env.VITE_APP_SIGNATURE = articlesConfig['signature']
|
||||||
|
process.env.VITE_CUSTOM_HEAD = articlesConfig['custom_head']
|
||||||
|
|
||||||
return defineConfig({
|
return defineConfig({
|
||||||
plugins: [vue(), vueDevTools(), mdPlugin({ mode: [Mode.HTML] })],
|
plugins: [vue(), vueDevTools(), mdPlugin({ mode: [Mode.HTML] })],
|
||||||
|
|||||||
Reference in New Issue
Block a user