Fix syntax error #8
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: build-test | |
on: | |
push: | |
branches: | |
- master | |
tags: | |
- 'v*' | |
pull_request: | |
branches: | |
- master | |
jobs: | |
checkout: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Restore dependencies | |
uses: actions/cache@v4 | |
with: | |
path: ~/.npm | |
key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }} | |
restore-keys: | | |
${{ runner.os }}-npm- | |
- name: Install dependencies | |
run: npm install | |
- name: Create build artifact | |
run: mkdir -p build && cp -r . build | |
- name: Upload build artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: build | |
path: build | |
build: | |
runs-on: ubuntu-latest | |
needs: checkout | |
steps: | |
- name: Download build artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: build | |
path: . | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Install clojure tools | |
uses: DeLaGuardo/setup-clojure@12.1 | |
with: | |
cli: latest | |
bb: latest | |
- name: Install CLJS dependencies | |
run: npx shadow-cljs classpath | |
- name: Create artifacts workspace | |
run: mkdir -p artifacts | |
- name: Tamper paste-replaced version if not release versioned | |
run: | | |
VERSION=$(node -p 'require("./package.json").version') | |
TAG_VERSION=NO-TAG | |
if [[ "${GITHUB_REF}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then | |
TAG_VERSION=${BASH_REMATCH[1]} | |
echo 'No version tampering because this is a release tag' | |
else | |
COMMIT=${GITHUB_SHA:0:8} | |
if [[ "${GITHUB_REF}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+)-(.*) ]]; then | |
TAG_VERSION=${BASH_REMATCH[1]} | |
TAG_TITLE=${BASH_REMATCH[2]} | |
PRERELEASE=${TAG_TITLE}-${COMMIT} | |
else | |
BRANCH=${GITHUB_REF_NAME//[^[:alnum:]]/-} | |
PRERELEASE=${BRANCH}-${COMMIT} | |
fi | |
echo "Append prerelease to version: -${PRERELEASE}" | |
npx json -I -f package.json -e 'this.version=this.version.replace(/$/,"-'${PRERELEASE}'")' | |
fi | |
if [ ${TAG_VERSION} = NO-TAG -o "${TAG_VERSION}" = "${VERSION}" ]; then | |
VERSION=$(node -p 'require("./package.json").version') | |
echo "Using version: ${VERSION}" | |
else | |
echo >&2 "FATAL! Version mismatch between package.json and tag. Aborting." | |
exit 1 | |
fi | |
- name: Package vsix | |
run: | | |
if [[ "${GITHUB_REF}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then | |
echo "Packaging as release" | |
PACKAGE_CMD="vsce package --allow-star-activation --githubBranch master" | |
else | |
echo "Packaging as pre-release" | |
PACKAGE_CMD="vsce package --allow-star-activation --pre-release" | |
fi | |
npx ${PACKAGE_CMD} | |
- name: Upload vsix artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: vsix | |
path: "*.vsix" | |
github-release: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Download vsix artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: vsix | |
path: . | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Determine if prerelease | |
id: prerelease_check | |
run: | | |
if [[ "${GITHUB_REF}" =~ ^refs/tags/v([0-9]+\.[0-9]+\.[0-9]+)$ ]]; then | |
echo "::set-output name=prerelease::false" | |
else | |
echo "::set-output name=prerelease::true" | |
fi | |
- name: Create GitHub Release | |
id: create_release | |
uses: actions/create-release@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: ${{ github.ref }} | |
release_name: Release ${{ github.ref }} | |
body: | | |
Changes: | |
$(awk '/^## \['${{ github.ref }}'\]/, started && /^##/ { started=1; if ($0 !~ /(^#|^\s*$)/) { gsub(/["$]/, "\\\\&"); print } }' CHANGELOG.md) | |
draft: false | |
prerelease: ${{ steps.prerelease_check.outputs.prerelease }} | |
- name: Upload Release Asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} | |
asset_path: paste-replaced-$(node -p 'require("./package.json").version').vsix | |
asset_name: paste-replaced-$(node -p 'require("./package.json").version').vsix | |
asset_content_type: application/octet-stream | |
marketplace-publish: | |
runs-on: ubuntu-latest | |
needs: github-release | |
steps: | |
- name: Download vsix artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: vsix | |
path: . | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Publish to the marketplace | |
run: | | |
VSCE_CMD="vsce publish --packagePath paste-replaced-$(node -p 'require("./package.json").version').vsix -p ${PUBLISH_TOKEN}" | |
if [ "${IS_LOCAL}" = YES ]; then | |
echo "Dry npx ${VSCE_CMD}" | |
else | |
npx ${VSCE_CMD} | |
open-vsx-publish: | |
runs-on: ubuntu-latest | |
needs: github-release | |
steps: | |
- name: Download vsix artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: vsix | |
path: . | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Publish to Open VSX | |
run: | | |
OVSX_CMD="ovsx publish paste-replaced-$(node -p 'require("./package.json").version').vsix --pat ${OVSX_PUBLISH_TOKEN}" | |
if [ "${IS_LOCAL}" = YES ]; then | |
echo "Dry npx ${OVSX_CMD}" | |
else | |
npx ${OVSX_CMD} | |
bump-version: | |
runs-on: ubuntu-latest | |
needs: marketplace-publish | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Node.js | |
uses: actions/setup-node@v4 | |
with: | |
node-version: '22' | |
- name: Bump dev version | |
run: | | |
git config --global user.email $GITHUB_USER_EMAIL | |
git config --global user.name $GITHUB_USER_NAME | |
git checkout master | |
npm set git-tag-version false && npm version patch | |
git add . | |
git commit -m "Bring on version $(node -p 'require("./package').version')!" | |
git push origin HEAD |