Skip to content

Commit

Permalink
Merge pull request #39 from OUCC/create-blog
Browse files Browse the repository at this point in the history
Create blog
  • Loading branch information
miyaji255 authored Dec 4, 2023
2 parents 4620186 + cfb001c commit 0f44163
Show file tree
Hide file tree
Showing 53 changed files with 2,945 additions and 197 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,48 @@ jobs:
- run: npm ci
- run: npm run typecheck

validate-blog:
if: startsWith(github.head_ref, 'blog/') && !startsWith(github.head_ref, 'blog/admin/')
needs: [build, lint, typecheck]
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: npm
- run: npm ci
- run: git diff origin/main..HEAD --name-only | xargs npm run validate-blog --

update-blogmeta:
needs: [validate-blog]
permissions:
contents: write
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version-file: .node-version
cache: npm
- run: npm ci
- name: Update blog meta
id: update_blogmeta
run: |
git diff origin/main..HEAD --name-only | xargs npm run update-blogmeta --
echo "{UPDATE_RESULT}_{$?}" >> "$GITHUB_OUTPUT"
continue-on-error: true
- run: exit ${{ steps.update_blogmeta.outputs.UPDATE_RESULT }}
if: steps.update_blogmeta.outputs.UPDATE_RESULT != '1' && steps.update_blogmeta.outputs.UPDATE_RESULT != '0'
- name: Git Commit
run: |
git config --local user.email "41898282+github-actions[bot]@users.noreply.github.com"
git config --local user.name "github-actions[bot]"
git add .
git commit -m "[Bot] Update blog meta"
git push origin ${{github.head_ref}}
if: steps.update_blogmeta.outputs.UPDATE_RESULT == '0'

deploy:
if: github.ref == 'refs/heads/main'
needs: [build, lint, typecheck]
Expand Down
1 change: 1 addition & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
src/content/blogs/
53 changes: 50 additions & 3 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,53 @@
{
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode",
"[typescript]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascript]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[typescriptreact]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[javascriptreact]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[astro]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[json]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonc]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[jsonl]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[markdown]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"[mdx]": {
"editor.formatOnSave": true,
"editor.formatOnPaste": true,
"editor.defaultFormatter": "esbenp.prettier-vscode"
},
"prettier.documentSelectors": ["**/*.astro"]
}
28 changes: 19 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ cf. [ディレクトリ構成 🚀 Astroドキュメント](https://docs.astro.b
│ ├── assets/ # 画像やアイコンなどの静的ファイル
│ ├── pages/ # ページ
│ ├── layouts/ # 各ページのレイアウト
│ ├── content/ # ブログの投稿に関するコンテンツ
│ └── components/ # 各ページで使うコンポーネント
│ ├── common/ # 全体で共通して使うもの
│ ├── layout/ # レイアウトで使うもの
Expand All @@ -29,12 +30,21 @@ cf. [ディレクトリ構成 🚀 Astroドキュメント](https://docs.astro.b

## コマンド

| Command | Action |
| :------------------ | :----------------------------------------- |
| `npm install` | 開発に必要なパッケージをインストールする |
| `npm run dev` | 開発サーバーを起動する |
| `npm run build` | 本番ビルドを `./dist/` に書き出す |
| `npm run preview` | 書き出した本番ビルドをプレビューする |
| `npm run typecheck` | 型チェックを実行する |
| `npm run lint` | コードのフォーマットが正しいかチェックする |
| `npm run format` | コードのフォーマットを自動で修正する |
| Command | Action |
| :------------------------ | :----------------------------------------------------------- |
| `npm install` | 開発に必要なパッケージをインストールする |
| `npm run dev` | 開発サーバーを起動する |
| `npm run build` | 本番ビルドを `./dist/` に書き出す |
| `npm run preview` | 書き出した本番ビルドをプレビューする |
| `npm run typecheck` | 型チェックを実行する |
| `npm run lint` | コードのフォーマットが正しいかチェックする |
| `npm run format` | コードのフォーマットを自動で修正する |
| `npm run validate-blog` | 指定したファイルがブログの更新の際に変更して良いか判定します |
| `npm run update-blogmeta` | 指定したファイルに対応するブログのメタ情報を更新します |

## ブログ

ブログの投稿を行う際は `blog/` から始まるブランチで作業してください。CIによる支援が得られます。
`src/content/blogs` に Markdown ファイルを追加することで新しい記事を投稿できます。

ブログの投稿に関する詳細な情報は [README_BLOG.md](./README_BLOG.md) を参照してください
114 changes: 114 additions & 0 deletions README_BLOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
# ブログの投稿に関して

OUCC BLOG の仕様について記載しています。何もわからない場合はサーバー係に投稿したい Markdown ファイルを渡してください。

ブログの投稿を行う際はブランチ名が `blog/` で始まるブランチを作成し作業してください。このブランチではブログの投稿に関する作業以外は禁止されていますが、後述するようにCIによる支援が得られます。

ブログに関して作業することを明示しつつこの制約を受けたくない場合は、ブランチ名が `blog/admin/` で始まるブランチで作業してください。

## 記事の投稿

`src/content/blogs` に Markdown ファイルを追加することで新しい記事を投稿できます。以下のように Markdown のフロントマッターに情報を書くことで投稿者やタグなどを設定できます。著者とタグは下のように JSON で設定したファイルのファイル名を指定できます。

```md
---
title: タイトル
description: 説明
author: 著者
tags:
- タグ1
- タグ2
- タグ3
---
```

画像ファイルは `src/content/blogs` に新しいディレクトリを作成してそこに配置するか、または外部においてURLで指定してください。

※ ファイル名には `#` を含めることができません。

## 記事のメタ情報

記事のメタ情報には投稿日時と更新日時が含まれています。これは `blog/` から始まるブランチで Pull Request を出すと自動的に更新されます。

以下のようにコマンドを使うことで手動で更新することもできます。

```bash
$ npm run update-blogmeta -- src/content/blogs/NEW-POST1.md src/content/blogs/NEW-POST2.md
```

## 著者

`src/content/authors` に JSON ファイルを追加することで新しいタグを作ることができます。ファイル名は記事の `author` で指定する際の値となるのでわかりやすい名前にすることをおすすめします。
著者のスキーマは以下のとおりです。`name` 以外のプロパティは省略可能です。

- name : 著者の表示名
- description : 著者の説明
- github : GitHub アカウントの ID
- image : 著者のアイコン
- `svg``src/assets/icons/blog` に入っているsvgファイルを指定できます。`name` には拡張子を除いたファイル名を指定してください。
- `external-url` は外部の画像を指定できます。

```ts
interface Author {
name: string
description?: string
github?: string
image?:
| {
type: 'svg'
name: string
}
| {
type: 'external-url'
url: string
}
}
```

## タグ

`src/content/tags` に JSON ファイルを追加することで新しいタグを作ることができます。ファイル名は記事の `tags` で指定する際の値となるのでわかりやすい名前にすることをおすすめします。
タグのスキーマは以下のとおりです。 `name` 以外のプロパティは省略可能です。

- name : タグの表示名
- description : タグの説明
- image : タグのアイコン
- `svg``src/assets/icons/blog` に入っているsvgファイルを指定できます。`name` には拡張子を除いたファイル名を指定してください。
- `external-url` は外部の画像を指定できます。
- site : 公式サイト
- url : 公式サイトのURL
- text : リンクの表示名 (指定のない場合 `タグ名 - 公式サイト` となります)
- document : 公式ドキュメント
- url : 公式ドキュメントのURL
- text : リンクの表示名 (指定のない場合 `タグ名 - 公式ドキュメント` となります)
- github : GitHubのリポジトリ
- url : GitHubのリポジトリのURL
- text : リンクの表示名 (指定のない場合 `タグ名 - GitHub` となります)

```ts
interface Tag {
name: string
description?: string
image?:
| {
type: 'svg'
name: string
}
| {
type: 'external-url'
url: string
}
site?: {
url: string
text?: string
}
document?: {
url: string
text?: string
}
github?: {
url: string
text?: string
}
}
```
3 changes: 2 additions & 1 deletion astro.config.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import { defineConfig } from 'astro/config'
import tailwind from '@astrojs/tailwind'
import sitemap from '@astrojs/sitemap'
import mdx from '@astrojs/mdx'

// https://astro.build/config
export default defineConfig({
Expand All @@ -25,5 +26,5 @@ export default defineConfig({
prefetch: {
prefetchAll: true,
},
integrations: [tailwind(), sitemap()],
integrations: [tailwind(), sitemap(), mdx()],
})
93 changes: 93 additions & 0 deletions fonts/Noto_Sans_JP/OFL.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
Copyright 2014-2021 Adobe (http://www.adobe.com/), with Reserved Font Name 'Source'

This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:
http://scripts.sil.org/OFL


-----------------------------------------------------------
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
-----------------------------------------------------------

PREAMBLE
The goals of the Open Font License (OFL) are to stimulate worldwide
development of collaborative font projects, to support the font creation
efforts of academic and linguistic communities, and to provide a free and
open framework in which fonts may be shared and improved in partnership
with others.

The OFL allows the licensed fonts to be used, studied, modified and
redistributed freely as long as they are not sold by themselves. The
fonts, including any derivative works, can be bundled, embedded,
redistributed and/or sold with any software provided that any reserved
names are not used by derivative works. The fonts and derivatives,
however, cannot be released under any other type of license. The
requirement for fonts to remain under this license does not apply
to any document created using the fonts or their derivatives.

DEFINITIONS
"Font Software" refers to the set of files released by the Copyright
Holder(s) under this license and clearly marked as such. This may
include source files, build scripts and documentation.

"Reserved Font Name" refers to any names specified as such after the
copyright statement(s).

"Original Version" refers to the collection of Font Software components as
distributed by the Copyright Holder(s).

"Modified Version" refers to any derivative made by adding to, deleting,
or substituting -- in part or in whole -- any of the components of the
Original Version, by changing formats or by porting the Font Software to a
new environment.

"Author" refers to any designer, engineer, programmer, technical
writer or other person who contributed to the Font Software.

PERMISSION & CONDITIONS
Permission is hereby granted, free of charge, to any person obtaining
a copy of the Font Software, to use, study, copy, merge, embed, modify,
redistribute, and sell modified and unmodified copies of the Font
Software, subject to the following conditions:

1) Neither the Font Software nor any of its individual components,
in Original or Modified Versions, may be sold by itself.

2) Original or Modified Versions of the Font Software may be bundled,
redistributed and/or sold with any software, provided that each copy
contains the above copyright notice and this license. These can be
included either as stand-alone text files, human-readable headers or
in the appropriate machine-readable metadata fields within text or
binary files as long as those fields can be easily viewed by the user.

3) No Modified Version of the Font Software may use the Reserved Font
Name(s) unless explicit written permission is granted by the corresponding
Copyright Holder. This restriction only applies to the primary font name as
presented to the users.

4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
Software shall not be used to promote, endorse or advertise any
Modified Version, except to acknowledge the contribution(s) of the
Copyright Holder(s) and the Author(s) or with their explicit written
permission.

5) The Font Software, modified or unmodified, in part or in whole,
must be distributed entirely under this license, and must not be
distributed under any other license. The requirement for fonts to
remain under this license does not apply to any document created
using the Font Software.

TERMINATION
This license becomes null and void if any of the above conditions are
not met.

DISCLAIMER
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
OTHER DEALINGS IN THE FONT SOFTWARE.
Loading

0 comments on commit 0f44163

Please sign in to comment.