Skip to content
This repository has been archived by the owner on Apr 29, 2022. It is now read-only.

Commit

Permalink
start on azure deployments
Browse files Browse the repository at this point in the history
  • Loading branch information
sballesteros committed Nov 1, 2019
1 parent 24f6d3c commit ce94b18
Show file tree
Hide file tree
Showing 12 changed files with 199 additions and 41 deletions.
20 changes: 20 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,17 +112,37 @@ To add stories, add a file that ends with `.stories.js` in the `./src/components

### Web extension

#### Development

For chrome:
1. Run `npm run extension:watch` that will build and watch the extension in the
`extension` directory. ! DO NOT EDIT THE FILES THERE or do not tack them on
git, with the exception of manifest.json, fonts, and popup.html.
2. Navigate to `chrome://extensions/`, be sure to toggle the "developer mode",
click on "load unpacked" and select the content of the `extension` directory.


#### Production

For chrome:
1. Run `npm run extension:build`
2. Navigate to `chrome://extensions/`, be sure to toggle the "developer mode",
click on "load unpacked" and select the content of the `extension` directory.

### Tests

Once cloudant is running run:

```sh
npm test
```

### Deployments

We use Azure.

1. install Azure CLI (see https://docs.microsoft.com/en-us/cli/azure/?view=azure-cli-latest)
2. run `az login` to login to the CLI
3. run `./deploy-app.sh` to deploy the app and `./deploy-service.sh` to deploy the service

To see the logs, run `./log-app.sh` or `./log-service.sh`
19 changes: 19 additions & 0 deletions deploy-app.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#!/usr/bin/env bash

## https://rapid-prereview.azurewebsites.net/

## See https://docs.microsoft.com/en-us/azure/app-service/deploy-zip

zip -r app.zip *.json *.js dist/* src/* public/* views/* scripts/* test/*

## See https://docs.microsoft.com/en-us/azure/app-service/containers/configure-language-nodejs

## TODO env variables: az webapp config appsettings set --name <app-name> --resource-group myResourceGroup --settings MONGODB_URI="mongodb://<cosmosdb-name>:<primary-master-key>@<cosmosdb-name>.documents.azure.com:10250/mean?ssl=true"

az webapp config appsettings set --resource-group "rapid-prereview" --name "rapid-prereview" --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

az webapp config set --resource-group "rapid-prereview" --name "rapid-prereview" --startup-file "npm run start:prod"

az webapp deployment source config-zip --resource-group "rapid-prereview" --name "rapid-prereview" --src app.zip

rm app.zip
17 changes: 17 additions & 0 deletions deploy-service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
#!/usr/bin/env bash

## https://rapid-prereview-service.azurewebsites.net/

## See https://docs.microsoft.com/en-us/azure/app-service/deploy-zip

zip -r service.zip *.json *.js dist/* src/* public/* views/* scripts/* test/*

## See https://docs.microsoft.com/en-us/azure/app-service/containers/configure-language-nodejs

az webapp config appsettings set --resource-group "rapid-prereview" --name "rapid-prereview-service" --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

az webapp config set --resource-group "rapid-prereview" --name "rapid-prereview-service" --startup-file "npm run start:prod"

az webapp deployment source config-zip --resource-group "rapid-prereview" --name "rapid-prereview-service" --src service.zip

rm service.zip
4 changes: 4 additions & 0 deletions log-app.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash

az webapp log config --name "rapid-prereview" --resource-group "rapid-prereview" --docker-container-logging filesystem
az webapp log tail --name "rapid-prereview" --resource-group "rapid-prereview"
4 changes: 4 additions & 0 deletions log-service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#!/usr/bin/env bash

az webapp log config --name "rapid-prereview-service" --resource-group "rapid-prereview" --docker-container-logging filesystem
az webapp log tail --name "rapid-prereview-service" --resource-group "rapid-prereview"
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,10 @@
"cloudant": "docker restart cloudant-developer",
"log-cloudant": "docker logs cloudant-developer",
"extension:watch": "webpack --config webpack-extension.config.js --watch --mode development",
"extension:build": "NODE_ENV=production webpack --config webpack-extension.config.js --mode production",
"start": "babel-node ./src/server.js",
"extension:build": "cross-env NODE_ENV=production webpack --config webpack-extension.config.js --mode production",
"start": "babel-node ./src/dev-server.js",
"start:prod": "node ./dist/server.js",
"start:service": "node ./dist/service.js",
"seed": "babel-node ./scripts/seed.js",
"ddocs": "babel-node ./scripts/ddocs.js",
"init": "babel-node ./scripts/init.js",
Expand Down
2 changes: 2 additions & 0 deletions src/components/shell-content.js
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,8 @@ function ShellContentRead({ preprint, actions, fetchActionsProgress }) {
const location = useLocation();
const history = useHistory();

// TODO make it work with the extension where we have no control on `location`

// sanitize qs
useEffect(() => {
if (!fetchActionsProgress.isActive) {
Expand Down
4 changes: 3 additions & 1 deletion src/db/feed.js
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ export default class Feed extends EventEmitter {

this.seq = since;

this.emit('start', this.seq);

this.feed = this.db.docs.follow({ since, include_docs: true });
this.feed.on('change', async change => {
const { doc } = change;
Expand Down Expand Up @@ -53,7 +55,7 @@ export default class Feed extends EventEmitter {
}

async resume() {
const seq = this.db.getLatestTriggeringSeq();
const seq = await this.db.getLatestTriggeringSeq();

return this.start({ since: seq });
}
Expand Down
60 changes: 60 additions & 0 deletions src/dev-server.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import http from 'http';
import express from 'express';
import webpack from 'webpack';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';
import webpackConfig from '../webpack.config';
import DB from '../src/db/db';
import Feed from '../src/db/feed';
import { rapid, assets } from './index';
import {
setIntervalAsync,
clearIntervalAsync
} from './utils/set-interval-async';

const compiler = webpack(webpackConfig);

const config = {
disableSsr: true
};

const db = new DB(config);
const feed = new Feed(db);
feed.start(); // TODO use feed.resume()
feed.on('error', err => {
console.error(err);
});

const intervalId = setIntervalAsync(
() => {
return db.updateScores();
},
5 * 60 * 1000,
err => console.error(err)
);

const app = express();
app.use(
webpackDevMiddleware(compiler, {
publicPath: webpackConfig.output.publicPath
})
);
app.use(webpackHotMiddleware(compiler));

app.use(assets(config));
app.use(rapid(config));

const server = http.createServer(app);

const port = 3000;
server.listen(port, () => {
console.log(`server listenning on port ${port}`);
});

process.once('SIGINT', function() {
server.close(() => {
clearIntervalAsync(intervalId);
feed.stop();
process.exit();
});
});
39 changes: 2 additions & 37 deletions src/server.js
Original file line number Diff line number Diff line change
@@ -1,60 +1,25 @@
import http from 'http';
import express from 'express';
import webpack from 'webpack';
import webpackDevMiddleware from 'webpack-dev-middleware';
import webpackHotMiddleware from 'webpack-hot-middleware';
import webpackConfig from '../webpack.config';
import DB from '../src/db/db';
import Feed from '../src/db/feed';
import { rapid, assets } from './index';
import {
setIntervalAsync,
clearIntervalAsync
} from './utils/set-interval-async';

const compiler = webpack(webpackConfig);

const config = {
isBeta: true,
disableSsr: true
};

const db = new DB(config);
const feed = new Feed(db);
feed.start(); // TODO use feed.resume()
feed.on('error', err => {
console.error(err);
});

const intervalId = setIntervalAsync(
() => {
return db.updateScores();
},
5 * 60 * 1000,
err => console.error(err)
);

const app = express();
app.use(
webpackDevMiddleware(compiler, {
publicPath: webpackConfig.output.publicPath
})
);
app.use(webpackHotMiddleware(compiler));

app.use(assets(config));
app.use(rapid(config));

const server = http.createServer(app);

const port = 3000;
const port = process.env.PORT || 3000;
server.listen(port, () => {
console.log(`server listenning on port ${port}`);
});

process.once('SIGINT', function() {
server.close(() => {
clearIntervalAsync(intervalId);
feed.stop(); // TODO store latest seq to disk ?
process.exit();
});
});
63 changes: 63 additions & 0 deletions src/service.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
import http from 'http';
import express from 'express';
import DB from '../src/db/db';
import Feed from '../src/db/feed';
import {
setIntervalAsync,
clearIntervalAsync
} from './utils/set-interval-async';

let lastSeq = null;
let lastErr = null;
let lastDateScoreUpdated = null;

const config = {
isBeta: true,
disableSsr: true
};

const db = new DB(config);
const feed = new Feed(db);
feed.resume();
feed.on('error', err => {
console.error(err);
});
feed.on('start', seq => {
lastSeq = seq;
});
feed.on('sync', seq => {
lastSeq = seq;
});
feed.on('error', err => {
lastErr = err;
});

const intervalId = setIntervalAsync(
() => {
lastDateScoreUpdated = new Date().toISOString();
return db.updateScores();
},
5 * 60 * 1000,
err => console.error(err)
);

const app = express();

app.get('/', (req, res, next) => {
res.json({ lastSeq, lastErr, lastDateScoreUpdated });
});

const server = http.createServer(app);

const port = process.env.PORT || 3000;
server.listen(port, () => {
console.log(`server listenning on port ${port}`);
});

process.once('SIGINT', function() {
server.close(() => {
clearIntervalAsync(intervalId);
feed.stop();
process.exit();
});
});
2 changes: 1 addition & 1 deletion src/utils/orcid.js
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export function createPassport(config) {
process.env.APP_ROOT_URL ||
'http://127.0.0.1:3000'}/auth/orcid/callback`;

if (process.env.NODE_ENV === 'production') {
if (process.env.NODE_ENV === 'production' && !config.isBeta) {
strategy = new OrcidStrategy(
{
sandbox: false, // remove this to use the production API
Expand Down

0 comments on commit ce94b18

Please sign in to comment.