Merge pull request #3345 from jspsych/changeset-release/main #179
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: | |
paths: | |
- ".changeset/**" | |
- ".github/**" | |
- "packages/**" | |
- "package.json" | |
- "package-lock.json" | |
branches: | |
- main | |
jobs: | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 20 | |
cache: npm | |
- name: Install dependencies | |
run: npm ci | |
- name: Download Turborepo cache | |
uses: actions/cache@v3 | |
with: | |
path: node_modules/.cache/turbo | |
key: ${{ runner.os }}-node-20-turbo-${{ hashFiles('node_modules/.cache/turbo') }} | |
restore-keys: | | |
${{ runner.os }}-node-20-turbo- | |
- name: Check types | |
run: npm run tsc | |
- name: Run tests | |
run: npm run test -- --ci --maxWorkers=2 | |
- name: Create Release Pull Request or Publish Packages | |
id: changesets | |
uses: changesets/action@v1 | |
with: | |
version: npm run changeset:version | |
publish: npm run changeset:publish | |
commit: "chore(release): version packages" | |
env: | |
NPM_TOKEN: ${{ secrets.NPM_TOKEN }} | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- name: Pack Dist Archive | |
if: steps.changesets.outputs.published == 'true' | |
run: npm run build:archive | |
- name: Upload Release Assets | |
uses: actions/github-script@v4 | |
if: steps.changesets.outputs.published == 'true' | |
with: | |
script: | | |
const fs = require("fs"); | |
const publishedPackages = ${{ steps.changesets.outputs.publishedPackages }}; | |
const { owner, repo } = context.repo; | |
const distFile = "dist.zip"; | |
let errorMessage; | |
for (const { name, version } of publishedPackages) { | |
const tag = `${name}@${version}`; | |
console.log(`Uploading dist archive release asset for ${tag}`); | |
try { | |
// https://docs.github.com/en/rest/reference/repos#get-a-release-by-tag-name | |
const releaseId = ( | |
await github.request("GET /repos/{owner}/{repo}/releases/tags/{tag}", { | |
owner, | |
repo, | |
tag, | |
}) | |
).data.id; | |
// https://octokit.github.io/rest.js/v18#repos-upload-release-asset | |
await github.repos.uploadReleaseAsset({ | |
owner, | |
repo, | |
release_id: releaseId, | |
name: `jspsych.zip`, | |
label: "Dist archive (zip)", | |
headers: { | |
"content-type": "application/zip", | |
"content-length": fs.statSync(distFile).size, | |
}, | |
data: fs.readFileSync(distFile), | |
}); | |
} catch (error) { | |
console.log(error); | |
errorMessage = error.message; | |
} | |
} | |
if (errorMessage) { | |
core.setFailed(errorMessage); | |
} else { | |
console.log(`Release assets successfully uploaded`); | |
} |