Skip to content

Time Capsule

Time Capsule #526

Workflow file for this run

name: Time Capsule
on:
workflow_dispatch:
inputs:
date:
required: false
description: "Date (YYYY-MM-DD, today by default)"
type: string
schedule:
- cron: '50 9 * * *'
jobs:
set:
runs-on: ubuntu-latest
outputs:
date: ${{ steps.date.outputs.date }}
year: ${{ steps.year.outputs.year }}
month: ${{ steps.month.outputs.month }}
day: ${{ steps.day.outputs.day }}
steps:
- name: Get date
id: date
run: |
if [ "$(echo "${{ github.event.inputs.date }}" |
grep -cE "^20[0-9]{2}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$")" -eq 1 ]
then
echo "date=${{ github.event.inputs.date }}" >> $GITHUB_OUTPUT
else
echo "date=$(date -d "3 years ago" +"%Y-%m-%d")" >> $GITHUB_OUTPUT
fi
- name: Get year
id: year
run: echo "year=$(cut -d '-' -f1 <<< ${{ steps.date.outputs.date }})" >> $GITHUB_OUTPUT
- name: Get month
id: month
run: echo "month=$(cut -d '-' -f2 <<< ${{ steps.date.outputs.date }})" >> $GITHUB_OUTPUT
- name: Get day
id: day
run: echo "day=$(cut -d '-' -f3 <<< ${{ steps.date.outputs.date }})" >> $GITHUB_OUTPUT
check:
needs: set
runs-on: ubuntu-latest
outputs:
found: ${{ steps.existence.outputs.found }}
not_duplicated: ${{ steps.duplication.outputs.not_duplicated }}
steps:
- name: Check out noraworld/diary
uses: actions/checkout@v4
- name: Check out noraworld/reserved-diary
uses: actions/checkout@v4
with:
repository: noraworld/reserved-diary
ref: main
token: ${{ secrets.GH_TOKEN }}
path: reserved-diary
- name: Check file existence
id: existence
run: |
if [ -e "reserved-diary/_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}/${{ needs.set.outputs.date }}-.md" ]; then
echo "found=true" >> $GITHUB_OUTPUT
else
echo "reserved-diary/_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}/${{ needs.set.outputs.date }}-.md does not exist" >&2
echo "found=false" >> $GITHUB_OUTPUT
fi
- name: Check file duplication
id: duplication
run: |
if ! [ -e "_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}/${{ needs.set.outputs.date }}-.md" ]; then
echo "not_duplicated=true" >> $GITHUB_OUTPUT
else
echo "_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}/${{ needs.set.outputs.date }}-.md already exists" >&2
echo "not_duplicated=false" >> $GITHUB_OUTPUT
fi
migrate:
needs: [set, check]
if: needs.check.outputs.found == 'true' && needs.check.outputs.not_duplicated == 'true'
runs-on: ubuntu-latest
steps:
- name: Check out noraworld/diary
uses: actions/checkout@v4
- name: Check out noraworld/reserved-diary
uses: actions/checkout@v4
with:
repository: noraworld/reserved-diary
ref: main
token: ${{ secrets.GH_TOKEN }}
path: reserved-diary
- name: Create directory
run: mkdir -p _posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}
- name: Migrate file
run: |
mv -n \
reserved-diary/_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}/${{ needs.set.outputs.date }}-.md \
_posts/${{ needs.set.outputs.year }}/${{ needs.set.outputs.month }}
- name: Set date for commit message
run: |
echo "DATE_FOR_MSG=${{ needs.set.outputs.year }} 年 $(echo ${{ needs.set.outputs.month }} | sed 's/^0*//') 月 $(echo ${{ needs.set.outputs.day }} | sed 's/^0*//') 日" >> $GITHUB_ENV
# Never execute "git add ." or "git add --all"!!!
- name: Commit
run: |
# https://qiita.com/thaim/items/3d1a4d09ec4a7d8844ce
git config user.name "$(git --no-pager log --format=format:'%an' -n 1)"
git config user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
git add _posts
git commit -m "${{ env.DATE_FOR_MSG }}の日記を公開"
git push -u origin main
cd reserved-diary
git config user.name "$(git --no-pager log --format=format:'%an' -n 1)"
git config user.email "$(git --no-pager log --format=format:'%ae' -n 1)"
git add _posts
git commit -m "${{ env.DATE_FOR_MSG }}の日記を公開リポジトリに移動"
git push -u origin main
deploy:
needs: migrate
uses: noraworld/diary/.github/workflows/pages.yml@main