Merge pull request #20 from DeckThemes/dev #20
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 | |
on: | |
push: | |
branches: | |
- "release" | |
jobs: | |
create-release: | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
outputs: | |
release_id: ${{ steps.create-release.outputs.result }} | |
change_log: ${{ steps.changelog.outputs.clean_changelog }} | |
version: ${{ steps.changelog.outputs.version }} | |
tag: ${{ steps.changelog.outputs.tag }} | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Generate Changelog for Release | |
id: changelog | |
uses: Tormak9970/reliable-changelog@v1 | |
with: | |
github-token: ${{ secrets.github_token }} | |
patch-version-bump-interval: "10" | |
- name: Create Release | |
id: create-release | |
uses: actions/github-script@v6 | |
env: | |
RELEASE_TAG: ${{ steps.changelog.outputs.tag }} | |
RELEASE_LOG: ${{ steps.changelog.outputs.clean_changelog }} | |
with: | |
script: | | |
const { data } = await github.rest.repos.createRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
tag_name: `${process.env.RELEASE_TAG}`, | |
name: `CSS Loader for VS Code ${process.env.RELEASE_TAG}`, | |
body: `${process.env.RELEASE_LOG}`, | |
draft: true, | |
prerelease: false | |
}); | |
return data.id | |
build-extension: | |
needs: create-release | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
ref: release | |
- name: Setup Node | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
- name: Setup Pnpm | |
uses: pnpm/action-setup@v2 | |
with: | |
version: 8.6.11 | |
- name: Install Dependencies | |
run: pnpm install | |
- name: "Update CHANGELOG.md" | |
uses: actions/github-script@v6 | |
env: | |
git_branch: "release" | |
release_id: ${{ needs.create-release.outputs.release_id }} | |
release_tag: ${{ needs.create-release.outputs.tag }} | |
changelog_contents: ${{ needs.create-release.outputs.change_log }} | |
with: | |
script: | | |
const fs = require("fs"); | |
const child_process = require("child_process"); | |
const path = require("path"); | |
const config = (prop, value) => exec.exec(`git config ${prop} "${value}"`); | |
const add = (file) => exec.exec(`git add ${file}`); | |
const commit = (message) => exec.exec(`git commit -m "${message}"`); | |
const push = (branch) => exec.exec(`git push origin ${branch} --follow-tags`); | |
const updateOrigin = (repo) => exec.exec(`git remote set-url origin ${repo}`); | |
core.setSecret(process.env.GITHUB_TOKEN); | |
updateOrigin(`https://x-access-token:${process.env.GITHUB_TOKEN}@github.com/${process.env.GITHUB_REPOSITORY}.git`); | |
config('user.email', "[email protected]"); | |
config('user.name', "DeckThemes Release Action"); | |
async function uploadReleaseAsset(name, contents) { | |
await github.rest.repos.uploadReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: process.env.release_id, | |
name: name, | |
data: contents | |
}); | |
} | |
const cwdPath = path.resolve(process.cwd()); | |
const changelogFilePath = path.join(cwdPath, "CHANGELOG.md"); | |
let changelogFileContents = fs.readFileSync(changelogFilePath, 'utf8'); | |
const changelogReplacer = `<!-- replace me with new updates! --> | |
## ${process.env.release_tag} | |
${process.env.changelog_contents}`; | |
changelogFileContents = changelogFileContents.replace("<!-- replace me with new updates! -->", changelogReplacer); | |
fs.writeFileSync(changelogFilePath, changelogFileContents); | |
await add("."); | |
await commit("chore(release): updated changelog file"); | |
await push(process.env.git_branch); | |
- name: Publish to Visual Studio Marketplace | |
uses: HaaLeo/publish-vscode-extension@v1 | |
with: | |
pat: ${{ secrets.AZURE_DEVOPS_TOKEN }} | |
registryUrl: https://marketplace.visualstudio.com | |
- name: Upload Release Assets | |
uses: actions/github-script@v6 | |
env: | |
release_id: ${{ needs.create-release.outputs.release_id }} | |
release_tag: ${{ needs.create-release.outputs.tag }} | |
with: | |
script: | | |
const fs = require("fs"); | |
const child_process = require("child_process"); | |
const path = require("path"); | |
async function uploadReleaseAsset(name, contents) { | |
await github.rest.repos.uploadReleaseAsset({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: process.env.release_id, | |
name: name, | |
data: contents | |
}); | |
} | |
const cwdPath = path.resolve(process.cwd()); | |
const schemaPath = path.join(cwdPath, `manifest-schema.json`); | |
const versionNum = `${process.env.release_tag}`.substring(1); | |
const vsixPath = path.join(cwdPath, `css-loader-for-vs-code-${versionNum}.vsix`); | |
// * upload release assets | |
await uploadReleaseAsset(`css-loader-for-vs-code-${process.env.release_tag}.vsix`, fs.readFileSync(vsixPath)); | |
await uploadReleaseAsset(`schema.json`, fs.readFileSync(schemaPath)); | |
publish-release: | |
needs: [create-release, build-extension] | |
permissions: | |
contents: write | |
runs-on: ubuntu-20.04 | |
steps: | |
- name: Checkout Repository | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 | |
ref: release | |
- name: Publish Release | |
id: publish-release | |
uses: actions/github-script@v6 | |
env: | |
release_id: ${{ needs.create-release.outputs.release_id }} | |
with: | |
script: | | |
github.rest.repos.updateRelease({ | |
owner: context.repo.owner, | |
repo: context.repo.repo, | |
release_id: process.env.release_id, | |
draft: false, | |
prerelease: false | |
}) | |