mirror of
https://github.com/kremalicious/astro-redirect-from.git
synced 2024-11-25 03:20:23 +01:00
add scripts, release process
This commit is contained in:
parent
a98a07be8c
commit
7cdd34a805
7
.github/dependabot.yml
vendored
Normal file
7
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
- package-ecosystem: npm
|
||||||
|
directory: '/'
|
||||||
|
schedule:
|
||||||
|
interval: weekly
|
||||||
|
time: '04:00'
|
46
.github/workflows/ci.yml
vendored
Normal file
46
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
name: 'CI'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main
|
||||||
|
tags:
|
||||||
|
- '**'
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- '**'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
test:
|
||||||
|
runs-on: ${{ matrix.os }}
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
os: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
|
node: ['18', '20']
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node }}
|
||||||
|
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm test
|
||||||
|
- run: npm run build
|
||||||
|
|
||||||
|
publish:
|
||||||
|
needs: test
|
||||||
|
if: success() && startsWith(github.ref, 'refs/tags')
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
registry-url: 'https://registry.npmjs.org'
|
||||||
|
|
||||||
|
- run: npm ci
|
||||||
|
- run: npm publish
|
||||||
|
env:
|
||||||
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
70
.github/workflows/codeql-analysis.yml
vendored
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
# For most projects, this workflow file will not need changing; you simply need
|
||||||
|
# to commit it to your repository.
|
||||||
|
#
|
||||||
|
# You may wish to alter this file to override the set of languages analyzed,
|
||||||
|
# or to provide custom queries or build logic.
|
||||||
|
#
|
||||||
|
# ******** NOTE ********
|
||||||
|
# We have attempted to detect the languages in your repository. Please check
|
||||||
|
# the `language` matrix defined below to confirm you have the correct set of
|
||||||
|
# supported CodeQL languages.
|
||||||
|
#
|
||||||
|
name: 'CodeQL'
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches: [main]
|
||||||
|
pull_request:
|
||||||
|
# The branches below must be a subset of the branches above
|
||||||
|
branches: [main]
|
||||||
|
schedule:
|
||||||
|
- cron: '24 22 * * 1'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
analyze:
|
||||||
|
name: Analyze
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
permissions:
|
||||||
|
actions: read
|
||||||
|
contents: read
|
||||||
|
security-events: write
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
language: ['javascript', 'typescript']
|
||||||
|
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
||||||
|
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Initializes the CodeQL tools for scanning.
|
||||||
|
- name: Initialize CodeQL
|
||||||
|
uses: github/codeql-action/init@v1
|
||||||
|
with:
|
||||||
|
languages: ${{ matrix.language }}
|
||||||
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
|
# By default, queries listed here will override any specified in a config file.
|
||||||
|
# Prefix the list here with "+" to use these queries and those in the config file.
|
||||||
|
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
||||||
|
|
||||||
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
|
- name: Autobuild
|
||||||
|
uses: github/codeql-action/autobuild@v1
|
||||||
|
|
||||||
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
|
# 📚 https://git.io/JvXDl
|
||||||
|
|
||||||
|
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
||||||
|
# and modify them (or add more) to build your code if your project
|
||||||
|
# uses a compiled language
|
||||||
|
|
||||||
|
#- run: |
|
||||||
|
# make bootstrap
|
||||||
|
# make release
|
||||||
|
|
||||||
|
- name: Perform CodeQL Analysis
|
||||||
|
uses: github/codeql-action/analyze@v1
|
12
README.md
12
README.md
@ -44,17 +44,17 @@ Astro takes over from there, handling the redirects based on your site's build m
|
|||||||
|
|
||||||
> For statically-generated sites with no adapter installed, this will produce a client redirect using a `<meta http-equiv="refresh">` tag and does not support status codes.
|
> For statically-generated sites with no adapter installed, this will produce a client redirect using a `<meta http-equiv="refresh">` tag and does not support status codes.
|
||||||
>
|
>
|
||||||
> When using SSR or with a static adapter in `output: static` mode, status codes are supported. Astro will serve redirected GET requests with a status of 301 and use a status of 308 for any other request method.
|
> When using SSR or with a static adapter in `output: static` mode, status codes are supported. Astro will serve redirected `GET` requests with a status of `301` and use a status of `308` for any other request method.
|
||||||
> [Astro Configuration Reference: redirects](https://docs.astro.build/en/reference/configuration-reference/#redirects)
|
> [Astro Configuration Reference: redirects](https://docs.astro.build/en/reference/configuration-reference/#redirects)
|
||||||
|
|
||||||
The plugin is designed to work with various hosting integrations, where most of them generate further redirect files in the places they require so this plugin works in combination with them:
|
The plugin is designed to work with various Astro hosting integrations, most of them generate further redirect files in the places they require so this plugin works in combination with them:
|
||||||
|
|
||||||
- [ ] Netlify
|
- [ ] Netlify
|
||||||
- [ ] Vercel
|
- [ ] Vercel
|
||||||
- [ ] Cloudflare
|
- [ ] Cloudflare
|
||||||
- [ ] S3
|
- [ ] S3
|
||||||
|
|
||||||
Because Astro integrations are run in the order they are defined in Astro's `integrations` array, this plugin should come before any other integrations which make use of the `redirects` config.
|
Because Astro integrations are run in the order they are defined in the `integrations` array, this plugin should come before any other integrations which make use of the `redirects` config.
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
@ -147,8 +147,8 @@ function getSlugFromFilePath(filePath: string) {
|
|||||||
let slug
|
let slug
|
||||||
|
|
||||||
// construct slug as full path from either:
|
// construct slug as full path from either:
|
||||||
// - file name, or
|
// - folder name if file name is index.md, or
|
||||||
// - folder name if file name is index.md
|
// - file name
|
||||||
if (parsedPath.base === 'index.md' || parsedPath.base === 'index.mdx') {
|
if (parsedPath.base === 'index.md' || parsedPath.base === 'index.mdx') {
|
||||||
slug = `/${parsedPath.dir}`
|
slug = `/${parsedPath.dir}`
|
||||||
} else {
|
} else {
|
||||||
@ -161,7 +161,7 @@ function getSlugFromFilePath(filePath: string) {
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
In your Markdown file's YAML frontmatter, use the key `redirect_from` followed by a list.
|
In your Markdown file's frontmatter, use the key `redirect_from` followed by a list.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
---
|
---
|
||||||
|
3358
package-lock.json
generated
3358
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
74
package.json
74
package.json
@ -1,36 +1,68 @@
|
|||||||
{
|
{
|
||||||
"name": "astro-redirect-from",
|
"name": "astro-redirect-from",
|
||||||
"version": "0.1.0",
|
"version": "0.1.0",
|
||||||
"description": "🎯 Set redirect urls in your frontmatter within your Astro site's Markdown files. ",
|
"description": "🎯 Set redirect urls in your frontmatter within your Astro site's Markdown files. Mimics the behavior of jekyll-redirect-from.",
|
||||||
"main": "index.js",
|
"author": "Matthias Kretschmann <m@kretschmann.io>",
|
||||||
|
"license": "MIT",
|
||||||
|
"main": "dist/index.js",
|
||||||
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"test": "echo \"Error: no test specified\" && exit 1"
|
"build": "tsc",
|
||||||
|
"start": "tsc --watch",
|
||||||
|
"test": "npm run lint && npm run build",
|
||||||
|
"lint": "eslint src/**/*.js",
|
||||||
|
"format": "prettier --write 'src/**/*.{ts,js,json,md}'",
|
||||||
|
"changelog": "auto-changelog -p",
|
||||||
|
"release": "release-it --non-interactive",
|
||||||
|
"prepublishOnly": "npm run build"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^20.6.3",
|
||||||
|
"auto-changelog": "^2.4.0",
|
||||||
|
"eslint": "^8.49.0",
|
||||||
|
"eslint-config-prettier": "^9.0.0",
|
||||||
|
"eslint-plugin-prettier": "^5.0.0",
|
||||||
|
"prettier": "^3.0.3",
|
||||||
|
"release-it": "^16.1.5",
|
||||||
|
"typescript": "^5.2.2",
|
||||||
|
"vite": "^4.4.9"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"astro": "^3.1.2",
|
||||||
|
"fast-glob": "^3.3.1",
|
||||||
|
"gray-matter": "^4.0.3"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"astro": ">= 3"
|
||||||
|
},
|
||||||
|
"release-it": {
|
||||||
|
"hooks": {
|
||||||
|
"before:init": "npm test",
|
||||||
|
"after:bump": "npm run changelog"
|
||||||
|
},
|
||||||
|
"git": {
|
||||||
|
"tagName": "v${version}"
|
||||||
|
},
|
||||||
|
"github": {
|
||||||
|
"release": true
|
||||||
|
},
|
||||||
|
"npm": {
|
||||||
|
"publish": false
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "git+https://github.com/kremalicious/astro-redirect-from.git"
|
"url": "git+https://github.com/kremalicious/astro-redirect-from.git"
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"astro-integration"
|
"astro",
|
||||||
|
"astro-integration",
|
||||||
|
"redirect",
|
||||||
|
"redirect-from",
|
||||||
|
"jekyll-migration"
|
||||||
],
|
],
|
||||||
"author": "Matthias Kretschmann <m@kretschmann.io>",
|
|
||||||
"license": "MIT",
|
|
||||||
"bugs": {
|
"bugs": {
|
||||||
"url": "https://github.com/kremalicious/astro-redirect-from/issues"
|
"url": "https://github.com/kremalicious/astro-redirect-from/issues"
|
||||||
},
|
},
|
||||||
"homepage": "https://kremalicious.com/astro-redirect-from",
|
"homepage": "https://kremalicious.com/astro-redirect-from"
|
||||||
"type": "module",
|
|
||||||
"devDependencies": {
|
|
||||||
"@types/node": "^20.6.3",
|
|
||||||
"eslint": "^8.49.0",
|
|
||||||
"eslint-config-prettier": "^9.0.0",
|
|
||||||
"eslint-plugin-prettier": "^5.0.0",
|
|
||||||
"prettier": "^3.0.3",
|
|
||||||
"typescript": "^5.2.2"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"astro": "^3.1.2",
|
|
||||||
"fast-glob": "^3.3.1",
|
|
||||||
"gray-matter": "^4.0.3"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import path from 'node:path'
|
import path from 'node:path'
|
||||||
import fs from 'node:fs/promises'
|
import { promises as fs, type PathLike } from 'node:fs'
|
||||||
import type { PathLike } from 'node:fs'
|
|
||||||
|
|
||||||
export function getSlugFromFilePath(filePath: string) {
|
export function getSlugFromFilePath(filePath: string) {
|
||||||
const parsedPath = path.parse(filePath)
|
const parsedPath = path.parse(filePath)
|
||||||
let slug
|
let slug
|
||||||
|
|
||||||
// construct slug as full path from either:
|
// construct slug as full path from either:
|
||||||
// - file name, or
|
// - folder name if file name is index.md, or
|
||||||
// - folder name if file name is index.md
|
// - file name
|
||||||
if (parsedPath.base === 'index.md' || parsedPath.base === 'index.mdx') {
|
if (parsedPath.base === 'index.md' || parsedPath.base === 'index.mdx') {
|
||||||
slug = `/${parsedPath.dir}`
|
slug = `/${parsedPath.dir}`
|
||||||
} else {
|
} else {
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"extends": "astro/tsconfigs/strict",
|
"extends": "astro/tsconfigs/strict",
|
||||||
"include": ["src"],
|
"include": ["src"],
|
||||||
"exclude": ["node_modules"],
|
"exclude": ["node_modules", "dist"],
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"outDir": "./dist",
|
"outDir": "./dist",
|
||||||
"typeRoots": ["node_modules/@types"]
|
"types": ["vite/client"]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user