Skip to content

fix: Handle case where PR is not required #5

fix: Handle case where PR is not required

fix: Handle case where PR is not required #5

name: Validate Activity List (and release if on master)
on:
pull_request:
branches: [ master ]
push:
branches: [ master ]
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
jobs:
validate:
runs-on: ubuntu-latest
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Install Node.js 20.x
uses: actions/setup-node@v3
with:
node-version: '20.x'
- name: Install dependencies
run: npm install @openactive/skos ajv
- name: Validate activity-list.jsonld
uses: actions/github-script@v7
with:
script: |
const Ajv = require('ajv');
const fs = require('fs');
const skos = require('@openactive/skos');
var schemafile = "./schema/activity-list.schema.json";
var rawfile = "./data/activity-list.jsonld";
let schema = JSON.parse(fs.readFileSync(schemafile));
let data = JSON.parse(fs.readFileSync(rawfile));
var ajv = new Ajv({ allErrors: 'true', verbose: 'true' });
var validate = ajv.compile(schema);
var is_valid = validate(data);
// Try to load into SKOS.js (will throw on failure)
var scheme = new skos.ConceptScheme(data);
if(is_valid){
console.log("activity-list.jsonld passed validation");
} else {
const errorMessage = "activity-list.jsonld failed validation"
console.log(`${errorMessage}\n=======\n`);
console.log(validate.errors);
throw new Error(errorMessage);
}
release:
needs: validate
runs-on: ubuntu-latest
if: ${{ !contains(toJSON(github.event.commits.*.message), '[no-release]') && github.ref == 'refs/heads/master' }}
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
steps:
- name: Check out repository
uses: actions/checkout@v2
- name: Get Current Time
id: timestamp
uses: nanzm/[email protected]
with:
format: 'YYYY-MM-DD_HH-mm-ss'
- name: Render PR body
id: fetch_pr
uses: actions/github-script@v7
with:
result-encoding: string
script: |
const { data: pulls } = await github.rest.pulls.list({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'closed',
head: context.sha
});
const pr = pulls.find(pr => pr.merge_commit_sha === context.sha);
if (pr) {
return `${pr.body || ''}\n\nAssociated PR: #${pr.number}`;
} else {
console.log('No associated PR found; skipping release creation.');
return '';
}
- name: Copy redirect index.html to data folder for deployment
if: ${{ steps.fetch_pr.outputs.result != '' }}
# .gitattributes is included in the /data/ directory of the gh-pages branch, so that index.html is not included in the release zip based on the same
run: |
cp ./gh-pages/index.html ./data/
- name: Setup Pages
if: ${{ steps.fetch_pr.outputs.result != ''}}
uses: actions/configure-pages@v4
- name: Upload artifact
if: ${{ steps.fetch_pr.outputs.result != ''}}
uses: actions/upload-pages-artifact@v3
with:
# Upload only /data/ directory
path: './data/'
- name: Deploy artifact to GitHub Pages
if: ${{ steps.fetch_pr.outputs.result != ''}}
id: deployment
uses: actions/deploy-pages@v4
- name: Create Release
if: ${{ steps.fetch_pr.outputs.result != '' }}
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.timestamp.outputs.time }}
release_name: Release v${{ steps.timestamp.outputs.time }}
body: ${{ steps.fetch_pr.outputs.result }}
draft: false
prerelease: false