Skip to content

Commit

Permalink
Merge pull request #390 from openstad/fix/cdn-dist-tags
Browse files Browse the repository at this point in the history
fix: add fallback to tag when branch could not be fetched via git
  • Loading branch information
Badmuts committed Apr 18, 2023
2 parents 8037101 + 1541246 commit fc9fb62
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 47 deletions.
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ ENV S3_KEY=""
ENV S3_SECRET=""
ENV S3_BUCKET=""

# CDN distribution tag used to fetch the latest version of the component libraries (openstad-components and react-admin)
ENV CDN_DIST_TAG="latest"

# Install all base dependencies.
RUN apk add --no-cache --update openssl g++ make python3 musl-dev git bash
Expand Down
118 changes: 71 additions & 47 deletions packages/cms/services/cdns.js
Original file line number Diff line number Diff line change
@@ -1,79 +1,103 @@
exports.contructComponentsCdn = async function() {

const fs = require('fs').promises;
const util = require('util');
const exec = util.promisify(require('child_process').exec);

exports.contructComponentsCdn = async function () {
// construct cdn urls
let openstadComponentsCdn = process.env.OPENSTAD_COMPONENTS_CDN || 'https://cdn.jsdelivr.net/npm/openstad-components@{version}/dist';
let openstadComponentsCdn =
process.env.OPENSTAD_COMPONENTS_CDN ||
'https://cdn.jsdelivr.net/npm/openstad-components@{version}/dist';
if (openstadComponentsCdn.match('{version}')) {

try {
const fs = require('fs').promises;
const util = require('util');
const exec = util.promisify(require('child_process').exec);

let { stdout, stderr } = await exec('git rev-parse --abbrev-ref HEAD');
let branch = stdout && stdout.toString();
branch = branch.trim();
let tag = await getTag();

let tag = 'alpha';
if (branch == 'release') tag = 'beta';
if (branch == 'master') tag = 'latest';

// get current published version
({ stdout, stderr } = await exec('npm view --json openstad-components'));
let info = stdout && stdout.toString();
info = JSON.parse(info)
info = JSON.parse(info);
let version = info['dist-tags'][tag];
if (!version) {
// fallback
let packageFile = fs.readFileSync(`${__dirname}/package.json`).toString() || '';
let match = packageFile && packageFile.match(/"openstad-components":\s*"(?:[^"\d]*)((?:\d+\.)*\d+)"/);
version = match && match[1] || null;
let packageFile =
await fs.readFile(`${__dirname}/../package.json`).toString() || '';
let match =
packageFile &&
packageFile.match(
/"openstad-components":\s*"(?:[^"\d]*)((?:\d+\.)*\d+)"/
);
version = (match && match[1]) || '';
}
openstadComponentsCdn = openstadComponentsCdn.replace('{version}', version);
openstadComponentsCdn = openstadComponentsCdn.replace(
'@{version}',
version ? `@${version}` : ''
);
console.log('Using cdn', openstadComponentsCdn);
} catch (err) {console.log('Error constructing cdn url', err);}

} catch (err) {
console.log('Error constructing cdn url', err);
}
}

return openstadComponentsCdn;

}

exports.contructReactAdminCdn = async function() {
};

exports.contructReactAdminCdn = async function () {
// construct cdn urls
let openstadReactAdminCdn = process.env.OPENSTAD_REACT_ADMIN_CDN || 'https://cdn.jsdelivr.net/npm/openstad-react-admin@{version}/dist';
let openstadReactAdminCdn =
process.env.OPENSTAD_REACT_ADMIN_CDN ||
'https://cdn.jsdelivr.net/npm/openstad-react-admin@{version}/dist';
if (openstadReactAdminCdn.match('{version}')) {

try {
const fs = require('fs').promises;
const util = require('util');
const exec = util.promisify(require('child_process').exec);

let { stdout, stderr } = await exec('git rev-parse --abbrev-ref HEAD');
let branch = stdout && stdout.toString();
branch = branch.trim();
let tag = await getTag();

let tag = 'alpha';
if (branch == 'release') tag = 'beta';
if (branch == 'master') tag = 'latest';

// get current published version
({ stdout, stderr } = await exec('npm view --json openstad-react-admin'));
let info = stdout && stdout.toString();
info = JSON.parse(info)
info = JSON.parse(info);
let version = info['dist-tags'][tag];
if (!version) {
// fallback
let packageFile = fs.readFileSync(`${__dirname}/package.json`).toString() || '';
let match = packageFile && packageFile.match(/"openstad-react-openstadComponentsCdn":\s*"(?:[^"\d]*)((?:\d+\.)*\d+)"/);
version = match && match[1] || null;
let packageFile =
await fs.readFile(`${__dirname}/../package.json`).toString() || '';
let match =
packageFile &&
packageFile.match(
/"openstad-react-openstadComponentsCdn":\s*"(?:[^"\d]*)((?:\d+\.)*\d+)"/
);
version = (match && match[1]) || '';
}
openstadReactAdminCdn = openstadReactAdminCdn.replace('{version}', version);
openstadReactAdminCdn = openstadReactAdminCdn.replace(
'@{version}',
version ? `@${version}` : ''
);
console.log('Using cdn', openstadReactAdminCdn);
} catch (err) {console.log('Error constructing cdn url', err);}

} catch (err) {
console.log('Error constructing cdn url', err);
}
}

return openstadReactAdminCdn;

};

async function getTag() {
const util = require('util');
const exec = util.promisify(require('child_process').exec);

let branch = '';
let tag = 'alpha';

try {
let { stdout, stderr } = await exec('git rev-parse --abbrev-ref HEAD');
branch = stdout && stdout.toString().trim();
} catch (error) {
// As a fallback we check for the CDN_DIST_TAG env variable
if (process.env.CDN_DIST_TAG) {
tag = process.env.CDN_DIST_TAG;
}
console.warn(`Could not get branch via git; fallback to ${tag}`);
}

if (branch == 'release') tag = 'beta';
if (branch == 'master') tag = 'latest';

return tag;
}

1 comment on commit fc9fb62

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Published new image: openstad/frontend:master-fc9fb62

Please sign in to comment.