Skip to content

Commit

Permalink
chore(benchmarks): Add Drupal data updater script to update benchmark…
Browse files Browse the repository at this point in the history
… data (gatsbyjs#23242)

* Add Drupal data updater script to update benchmark data

* Remove console.log statement

Co-authored-by: gatsbybot <mathews.kyle+gatsbybot@gmail.com>
  • Loading branch information
2 people authored and johno committed Apr 21, 2020
1 parent b23ffca commit a6cc113
Show file tree
Hide file tree
Showing 5 changed files with 91 additions and 1 deletion.
2 changes: 2 additions & 0 deletions benchmarks/source-drupal/.env.example
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
BENCHMARK_DRUPAL_BASE_URL=
BENCHMARK_DRUPAL_USERNAME=
BENCHMARK_DRUPAL_PASSWORD=
6 changes: 5 additions & 1 deletion benchmarks/source-drupal/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,22 +7,26 @@
"scripts": {
"build": "gatsby build",
"build:send": "cross-env BENCHMARK_REPORTING_URL=true gatsby build",
"data-update": "ts-node scripts/data-update.ts",
"develop": "gatsby develop",
"format": "prettier --write \"**/*.{js,jsx,json,md}\"",
"start": "npm run develop",
"serve": "gatsby serve"
},
"dependencies": {
"dotenv": "^8.2.0",
"faker": "^4.1.0",
"gatsby": "^2.19.7",
"gatsby-image": "^2.2.40",
"gatsby-plugin-sharp": "^2.4.5",
"gatsby-source-drupal": "^3.3.18",
"gatsby-source-filesystem": "^2.1.48",
"gatsby-transformer-sharp": "^2.3.14",
"lodash.kebabcase": "^4.1.1",
"node-fetch": "^2.6.0",
"react": "^16.12.0",
"react-dom": "^16.12.0"
"react-dom": "^16.12.0",
"ts-node": "^8.6.2"
},
"devDependencies": {
"cross-env": "^7.0.0",
Expand Down
11 changes: 11 additions & 0 deletions benchmarks/source-drupal/scripts/data-update.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
#!/usr/bin/env node

import { update } from "./updater"

require(`dotenv`).config()

const username = process.env.BENCHMARK_DRUPAL_USERNAME
const password = process.env.BENCHMARK_DRUPAL_PASSWORD
const server = process.env.BENCHMARK_DRUPAL_BASE_URL

update(username, password, server)
62 changes: 62 additions & 0 deletions benchmarks/source-drupal/scripts/updater.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import fetch from "node-fetch"
import faker from "faker"

interface IArticle {
id: string
attributes: {
title: string
}
}

// Remove last word of title and replace it with a random word.
const updateTitle = (title: string): string =>
`${title.substring(0, title.lastIndexOf(` `))} ${faker.lorem.word()}`

const patchArticle = async (
username: string,
password: string,
server: string,
article: IArticle
): Promise<void> => {
const url = `https://${server}/jsonapi/node/article/${article.id}`

const response = await fetch(url, {
method: `PATCH`,
headers: {
"Content-Type": `application/vnd.api+json`,
Authorization: `Basic ${Buffer.from(`${username}:${password}`).toString(
`base64`
)}`
},
body: JSON.stringify({
data: {
type: `node--article`,
id: article.id,
attributes: {
title: updateTitle(article.attributes.title)
}
}
})
})
}

const getFirstArticle = async (server: string): Promise<IArticle> => {
const url = `https://${server}/jsonapi/node/article?page[limit]=1&sort=created`
const response = await fetch(url)
const body = await response.json()
return body.data[0]
}

export const update = async (
username?: string,
password?: string,
server?: string
): Promise<void> => {
if (!username || !password || !server) {
console.error(`You must pass username, password and server`)
return
}

const article = await getFirstArticle(server)
await patchArticle(username, password, server, article)
}
11 changes: 11 additions & 0 deletions benchmarks/source-drupal/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"compilerOptions": {
"typeRoots": ["./node_modules/@types", "./typings"],
"target": "ES2018" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */,
"module": "commonjs" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */,
"strict": true /* Enable all strict type-checking options. */,
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */,
"noImplicitAny": false
}
}

0 comments on commit a6cc113

Please sign in to comment.