Create Release with Zipped Branch Assets and Date #107
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Create Release with Zipped Branch Assets and Date | |
on: | |
workflow_dispatch: | |
jobs: | |
release: | |
runs-on: ubuntu-latest | |
permissions: | |
contents: write | |
actions: write | |
steps: | |
- name: Set up environment variables | |
run: | | |
echo "CURRENT_DATE=$(date +'%Y%m%d')" >> $GITHUB_ENV | |
echo "RELEASE_TITLE=$(date +'%Y.%m.%d') 词库更新" >> $GITHUB_ENV | |
- name: Checkout main branch | |
uses: actions/checkout@v4 | |
- name: Create directories | |
run: | | |
mkdir -p Rime | |
mkdir -p mb/xmjd6 | |
- name: Zip main branch files excluding .git and .github | |
run: zip -r xmjd6.zip . -x "*.git*" -x "*.github*" -x "yong*" -x "mb*" -x "Rime*" | |
- name: Prepare Rime directory for Rabbit | |
run: | | |
mkdir -p Rime/ | |
rsync -avm --exclude='.git*' --exclude='*.github*' --exclude='squirrel*' --exclude='weasel*' --exclude='hamster*' --exclude='*.txt' --exclude='xmjd6.zip' --exclude='yong*' --exclude='mb*' --exclude='Rime*' . Rime/ | |
ls -al Rime/ | |
pwd | |
- name: Get latest release tag | |
id: get_tag | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const response = await github.rest.repos.getLatestRelease({ | |
owner: 'amorphobia', | |
repo: 'rabbit', | |
}); | |
const tagName = response.data.tag_name; | |
console.log(`Latest release tag is ${tagName}`); | |
return tagName; | |
- name: Fetch tags and generate changelog from last release | |
id: changelog | |
uses: actions/github-script@v7 | |
with: | |
script: | | |
const lastRelease = await github.rest.repos.getLatestRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo | |
}); | |
const compare = await github.rest.repos.compareCommits({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
base: lastRelease.data.tag_name, | |
head: 'main' | |
}); | |
let changelog = ''; | |
compare.data.commits.forEach(commit => { | |
const message = commit.commit.message.split('\n').join(' '); | |
const commitLink = `[${commit.sha.substring(0, 7)}](https://github.com/${context.repo.owner}/${context.repo.repo}/commit/${commit.sha})`; | |
changelog += `- ${commitLink} ${message} \n`; | |
}); | |
core.setOutput('changelog', changelog); | |
- name: Set the tag as environment variable | |
run: echo "RELEASE_TAG=${{ steps.get_tag.outputs.result }}" >> $GITHUB_ENV | |
- name: Download the release asset | |
run: | | |
curl -L -o rabbit-${{ env.RELEASE_TAG }}.zip https://github.com/amorphobia/rabbit/releases/download/${{ env.RELEASE_TAG }}/rabbit-${{ env.RELEASE_TAG }}-x64.zip | |
- name: Unzip Rabbit | |
run: | | |
mkdir -p Rabbit | |
unzip rabbit-${{ env.RELEASE_TAG }}.zip -d Rabbit | |
- name: Clean SharedSupport | |
run: | | |
mkdir -p /tmp/Rabbit_backup | |
cp Rabbit/SharedSupport/punctuation.yaml /tmp/Rabbit_backup/ | |
cp Rabbit/SharedSupport/key_bindings.yaml /tmp/Rabbit_backup/ | |
cp Rabbit/SharedSupport/default.yaml /tmp/Rabbit_backup/ | |
rm -rf Rabbit/SharedSupport/* | |
cp /tmp/Rabbit_backup/* Rabbit/SharedSupport/ | |
rm -rf /tmp/Rabbit_backup | |
- name: Merge Rime into Rabbit | |
run: | | |
cp -r Rime/. Rabbit/SharedSupport | |
zip -r Rabbit-xmjd6.zip Rabbit/ | |
- name: Convert .dict.yaml files to .txt using Bash | |
run: | | |
for dict_file in xmjd6.zidingyi.dict.yaml xmjd6.cizu.dict.yaml xmjd6.fjcy.dict.yaml xmjd6.danzi.dict.yaml xmjd6.buchong.dict.yaml xmjd6.gbk.dict.yaml xmjd6.wxw.dict.yaml | |
do | |
txt_file="Rime/$(basename $dict_file .dict.yaml).txt" | |
awk -F'\t' ' | |
/^[^#]/ { | |
if ($0 ~ /^---|name:|version:|sort:|\.\.\.$/) next; | |
if ($1 ~ /^[A-Za-z0-9\s]+$/) { | |
print $1 " " $2 | |
} else { | |
print $2 " " $1 | |
} | |
}' "$dict_file" > "$txt_file" | |
done | |
- name: Merge all .txt files, add header, and convert to GB18030 using Python | |
run: | | |
header='name=星猫键道6\nkey=`abcedfghijklmnopqrstuvwxyz;\\\nlen=12\nwildcard=~\nbihua=viuoa\ncode_e2=p11+p12+p21+p22+p13+p23\ncode_e3=p11+p21+p31+p13+p23+p33\ncode_a4=p11+p21+p31+n11+p13+p23+p33\n[DATA]' | |
echo -e "$header" > Rime/xmjd6.header.txt | |
cat Rime/*.txt > Rime/xmjd6.body.txt | |
echo -n "$(cat Rime/xmjd6.header.txt Rime/xmjd6.body.txt)" > mb/xmjd6/xmjd6.txt | |
rm Rime/xmjd6.header.txt Rime/xmjd6.body.txt | |
python -c "with open('mb/xmjd6/xmjd6.txt', 'r', encoding='utf-8') as f: data = f.read(); open('mb/xmjd6/xmjd6.txt', 'w', encoding='gb18030', errors='ignore').write(data)" | |
- name: Zip yong.ini and mb directory | |
run: | | |
zip -r yong-xmjd6.zip yong.ini mb/ | |
- name: Create Release | |
id: create_release | |
uses: shogo82148/actions-create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ env.CURRENT_DATE }} | |
release_name: ${{ env.RELEASE_TITLE }} | |
body: | | |
## Changelog | |
${{ steps.changelog.outputs.changelog }} | |
## Release Notes | |
- [如何使用](https://github.com/hugh7007/xmjd6-rere#如何使用) | |
draft: false | |
prerelease: false | |
- name: Upload Rabbit-xmjd6.zip to Release | |
uses: shogo82148/actions-upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./Rabbit-xmjd6.zip | |
asset_name: Rabbit-xmjd6.zip | |
asset_content_type: application/zip | |
- name: Upload yong-xmjd6.zip to Release | |
uses: shogo82148/actions-upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./yong-xmjd6.zip | |
asset_name: yong-xmjd6.zip | |
asset_content_type: application/zip | |
- name: Upload xmjd6.zip to Release | |
uses: shogo82148/actions-upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: ./xmjd6.zip | |
asset_name: xmjd6.zip | |
asset_content_type: application/zip |