Initial commit #1
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: Release | |
permissions: | |
contents: write | |
on: | |
push: | |
branches: | |
- main | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
if: "!startsWith(github.ref, 'refs/tags/')" | |
steps: | |
- uses: actions/checkout@v2 | |
with: | |
ref: "main" | |
fetch-depth: 0 | |
- name: Set up Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
- name: Install dependencies | |
run: | | |
npm install | |
- name: Create .releaserc | |
env: | |
REPO_URL: ${{ format('https://github.com/{0}.git', github.repository) }} | |
run: | | |
echo "{\"branches\":[\"main\"],\"plugins\":[[\"@semantic-release/commit-analyzer\",{\"preset\":\"conventionalcommits\",\"releaseRules\":[{\"type\":\"enhancement\",\"release\":\"minor\"}]}], \"semantic-release-export-data\"],\"repositoryUrl\":\"$REPO_URL\",\"tagFormat\":\"\${version}\"}" > .releaserc | |
- name: Get first commit | |
id: firstCommit | |
run: echo "FIRST_COMMIT=$(git rev-list --date-order main | tail -1)" >> $GITHUB_OUTPUT | |
- uses: mukunku/[email protected] | |
id: checkTag | |
with: | |
tag: "0.1.0" | |
- name: Create tag | |
if: ${{ steps.checkTag.outputs.exists == 'false' }} | |
uses: tvdias/[email protected] | |
with: | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
tag: "0.1.0" | |
commit-sha: ${{ steps.firstCommit.outputs.FIRST_COMMIT }} | |
- name: Get new version | |
id: newVersion | |
run: npx --yes semantic-release --branches main --dry-run | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Get latest framework version | |
id: latestFramework | |
uses: pozetroninc/[email protected] | |
with: | |
repository: atampy25/simple-mod-framework | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Update manifest.json version | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: jossef/action-set-json-field@v2 | |
with: | |
file: "manifest.json" | |
field: "version" | |
value: ${{ steps.newVersion.outputs.new-release-version }} | |
- name: Update manifest.json frameworkVersion | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: jossef/action-set-json-field@v2 | |
with: | |
file: "manifest.json" | |
field: "frameworkVersion" | |
value: ${{ steps.latestFramework.outputs.release }} | |
- name: Update manifest.json updateCheck | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: jossef/action-set-json-field@v2 | |
with: | |
file: "manifest.json" | |
field: "updateCheck" | |
value: ${{ format('https://github.com/{0}/releases/latest/download/updates.json', github.repository) }} | |
- name: Get mod ID | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: modID | |
uses: notiz-dev/github-action-json-property@release | |
with: | |
path: "manifest.json" | |
prop_path: "id" | |
- name: Get mod name | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: modName | |
uses: notiz-dev/github-action-json-property@release | |
with: | |
path: "manifest.json" | |
prop_path: "name" | |
- name: Get mod description | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: modDesc | |
uses: notiz-dev/github-action-json-property@release | |
with: | |
path: "manifest.json" | |
prop_path: "description" | |
- name: Get mod authors | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: modAuthors | |
uses: notiz-dev/github-action-json-property@release | |
with: | |
path: "manifest.json" | |
prop_path: "authors" | |
- name: Read README.md | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: readme | |
uses: juliangruber/[email protected] | |
with: | |
path: README.md | |
- name: Auto-generate README | |
if: ${{ steps.newVersion.outputs.new-release-version && (contains(steps.readme.outputs.content, 'Simple Mod Framework mod template') || contains(steps.readme.outputs.content, 'This README was automatically generated from the mod''s manifest.')) }} | |
uses: DamianReeves/[email protected] | |
with: | |
path: README.md | |
contents: | | |
# ${{ steps.modName.outputs.prop }} | |
${{ steps.modDesc.outputs.prop }} | |
[Install](https://hitman-resources.netlify.app/smf-install-link/${{ format('https://github.com/{0}/releases/latest/download/mod.framework.zip', github.repository) }}) | [Download](${{ format('https://github.com/{0}/releases/latest/download/mod.framework.zip', github.repository) }}) | |
--- | |
`${{ steps.modID.outputs.prop }}` v${{ steps.newVersion.outputs.new-release-version }}, by ${{ join(fromJSON(steps.modAuthors.outputs.prop), ', ') }}. This README was automatically generated from the mod's manifest. | |
write-mode: overwrite | |
- name: Format | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: actionsx/prettier@v2 | |
with: | |
args: --write . | |
- name: Commit changes | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: EndBug/[email protected] | |
with: | |
default_author: github_actions | |
message: "chore: mod update" | |
tag: ${{ steps.newVersion.outputs.new-release-version }} | |
- name: Generate changelog | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
id: changelog | |
uses: loopwerk/[email protected] | |
with: | |
token: ${{ secrets.GITHUB_TOKEN }} | |
config_file: .github/tag-changelog-config.js | |
exclude_types: other,docs,chore,build,amend,refactor | |
- name: Copy files | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
env: | |
TARGETDIR: ${{ steps.modID.outputs.prop }} | |
run: | | |
mkdir $TARGETDIR | |
for file in *;do test "$file" != "$TARGETDIR" && cp -r "$file" "$TARGETDIR/";done | |
rm -rf "$TARGETDIR/node_modules" | |
rm "$TARGETDIR/package.json" "$TARGETDIR/package-lock.json" "$TARGETDIR/README.md" | |
- name: Create ZIP | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: TheDoctor0/zip-release@4fb9e4ff72847dd3d1c111cf63834e353ed7cb3d | |
with: | |
filename: mod.framework.zip | |
path: ${{ steps.modID.outputs.prop }} | |
- name: Create updates.json | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
env: | |
VERSION: ${{ toJSON(steps.newVersion.outputs.new-release-version) }} | |
CHANGELOG: ${{ toJSON(steps.changelog.outputs.changes) }} | |
URL: ${{ format('https://github.com/{0}/releases/latest/download/mod.framework.zip', github.repository) }} | |
run: | | |
echo "{\"version\":$VERSION,\"changelog\":$CHANGELOG,\"url\":\"$URL\"}" > updates.json | |
- name: Release | |
if: ${{ steps.newVersion.outputs.new-release-version }} | |
uses: softprops/action-gh-release@v1 | |
with: | |
name: ${{ steps.newVersion.outputs.new-release-version }} | |
body: "[Install](https://hitman-resources.netlify.app/smf-install-link/${{ format('https://github.com/{0}/releases/download/{1}/mod.framework.zip', github.repository, steps.newVersion.outputs.new-release-version) }}) | [Download](${{ format('https://github.com/{0}/releases/download/{1}/mod.framework.zip', github.repository, steps.newVersion.outputs.new-release-version) }})\n\n${{ steps.changelog.outputs.changes }}" | |
tag_name: ${{ steps.newVersion.outputs.new-release-version }} | |
repository: ${{ github.repository }} | |
files: | | |
mod.framework.zip | |
updates.json |