Skip to content

Commit

Permalink
PubNub SDK v3.0.0 release.
Browse files Browse the repository at this point in the history
  • Loading branch information
client-engineering-bot committed May 24, 2021
1 parent f6715d0 commit b12fdad
Show file tree
Hide file tree
Showing 16 changed files with 1,081 additions and 170 deletions.
24 changes: 24 additions & 0 deletions .github/workflows/validate-pubnub-yml.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
name: validate-pubnub-yml

# Controls when the action will run. Workflow runs when manually triggered using the UI
# or API.
on: [push]

jobs:
build:
name: Validate PubNub yml
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: Install dependencies
run: |
npm install ajv@6.12.6
npm install yaml@1.10.0
npm install node-fetch@2.6.1
npm install chalk@2.4.2
- name: Validate
run: GITHUB_TOKEN=${{ secrets.GH_TOKEN }} node ./.github/workflows/validate-yml.js
94 changes: 94 additions & 0 deletions .github/workflows/validate-yml.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
const YAML = require('yaml')
const Ajv = require('ajv');
const fetch = require('node-fetch');
const fs = require('fs');
const chalk = require('chalk');

const ghToken = process.env.GITHUB_TOKEN;
const ghHeaders = {'User-Agent': 'sdk-bot', 'Authorization': 'token ' + ghToken,'Accept': 'application/vnd.github.v3.raw'};

const sdkReposJSONBranch = "develop";
let sdkReposJSONPath = "http://api.github.com/repos/pubnub/documentation-resources/contents/website-common/tools/build/sdk-repos.json?ref=" + sdkReposJSONBranch;
startExecution(sdkReposJSONPath);

async function startExecution(sdkReposJSONPath){
var sdkRepos = await requestGetFromGithub(sdkReposJSONPath);
var sdkReposAndFeatureMappingArray = parseReposAndFeatureMapping(sdkRepos);
var schemaText = await requestGetFromGithub(sdkReposAndFeatureMappingArray[2]);

schema = JSON.parse(schemaText);
var yaml = fs.readFileSync(".pubnub.yml", 'utf8');

if(yaml != null){
yml = YAML.parse(yaml);
var ajv = new Ajv({schemaId: 'id', "verbose":true, "allErrors": true});
const validate = ajv.compile(schema);
const valid = validate(yml);
if (validate.errors!= null) {
console.log(chalk.cyan("==================================="));
console.log(chalk.red(yml["version"] + " validation errors..."));
console.log(chalk.cyan("==================================="));
console.log(validate.errors);
console.log(chalk.cyan("==================================="));
var result = {code:1, repo: yml["version"], msg: "validation errors"};
printResult(result);
process.exit(1);
}
else {
var result = {code: 0, repo: yml["version"], msg: "validation pass"};
printResult(result);
}
} else {
var result = {code:1, repo: "yml null", msg: "validation errors"};
printResult(result);
process.exit(1);
}
}

function printResult(result){
var str = result.repo + ", " + result.msg;
if(result.code === 0){
console.log(chalk.green(str) + ", Code: " + result.code);
} else {
console.log(chalk.red(str) + ", Code: " + result.code);
}
}

async function requestGetFromGithub(url){
try {
const response = await fetch(url, {
headers: ghHeaders,
method: 'get',
});
if(response.status == 200){
const json = await response.text();
return json;
} else {
console.error(chalk.red("res.status: " + response.status + "\n URL: " + url));
return null;
}

} catch (error) {
console.error(chalk.red("requestGetFromGithub: " + error + "\n URL: " + url));
return null;
}
}

function parseReposAndFeatureMapping(body){
if(body != null){
var sdkRepos = JSON.parse(body);
var locations = sdkRepos["locations"];
if(locations!=null){
var sdkURLs = locations["sdks"];
var featureMappingURL = locations["featureMapping"];
var pubnubYAMLSchemaURL = locations["pubnubYAMLSchema"];
return [sdkURLs, featureMappingURL, pubnubYAMLSchemaURL];
} else {
console.log(chalk.red("response locations null"));
return null;
}
} else {
console.log(chalk.red("response body null"));
return null;
}
}
Loading

0 comments on commit b12fdad

Please sign in to comment.