diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..354a32e2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,68 @@ +name: release + +on: + push: + tags: + - v* + +jobs: + check_branch: + runs-on: ubuntu-latest + outputs: + should_build: ${{ steps.permitted.outputs.result }} + + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Fetch remote branches + run: | + git fetch origin --depth=1 + + - name: Check if on permitted branch + id: permitted + run: | + result= + branchName=$(git branch -a --contains $GITHUB_SHA | grep 'remotes/origin/' || echo "") + if [[ $branchName == *"master" || $branchName == *"-release" ]]; then + result=true + fi + echo "result=${result}" >> "$GITHUB_OUTPUT" + + release: + runs-on: ubuntu-latest + needs: check_branch + permissions: + contents: write + + if: ${{ github.repository_owner == 'visgl' && needs.check_branch.outputs.should_build }} + + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NPM_ACCESS_TOKEN: ${{ secrets.NPM_ACCESS_TOKEN }} + + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + + - name: Use Node.js + uses: actions/setup-node@8f152de45cc393bb48ce5d89d36b731f54556e65 # v4.0.0 + with: + node-version: '18.x' + + - name: Create GitHub release entry + run: | + body=$(node scripts/github-release.js) && + curl \ + -X POST \ + -H "Accept: application/vnd.github.v3+json" \ + https://api.github.com/repos/visgl/hubble.gl/releases \ + -d "${body}" \ + -H "Authorization: token ${GITHUB_TOKEN}" + + - name: Login to NPM + run: npm config set "//registry.npmjs.org/:_authToken=${NPM_ACCESS_TOKEN}" + + - name: Install dependencies + run: yarn + + - name: Publish to NPM + run: npx ocular-publish from-git diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..c002ea02 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,164 @@ +# Change Log + +All notable changes to hubble.gl will be documented in this file. + +For a human readable version, visit https://hubble.gl/#/documentation/overview/upgrade-guide + + + +## hubble.gl v1.4 + +### hubble.gl v1.4 Prereleases + +## hubble.gl v1.3 + +### hubble.gl v1.3 Prereleases + +#### hubble.gl [1.3.0-alpha.6] - Aug 27 2021 + +- feat(core) File Size Estimation Improvements by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/143 +- feat(react) Modal Refinements Update by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/144 +- enhancement(core) disable static map property by @igorDykhta in https://github.com/visgl/hubble.gl/pull/150 +- chore(react) remove redundant mapState updater by @chrisgervang in https://github.com/visgl/hubble.gl/pull/152 +- bug(core) time filter idx is expected to be a number by @chrisgervang in https://github.com/visgl/hubble.gl/pull/153 + +#### hubble.gl [1.3.0-alpha.5] - Aug 2 2021 + +- chore(core) consolidate copied kepler layer creation code by @chrisgervang in https://github.com/visgl/hubble.gl/pull/138 +- chore(core) consolidate form setting props into an object by @chrisgervang in https://github.com/visgl/hubble.gl/pull/139 +- bug(react) remove double install of react-intl by @chrisgervang in https://github.com/visgl/hubble.gl/pull/140 +- enhancement(react) kepler, memo and return the viewState before/after rendering by @chrisgervang in https://github.com/visgl/hubble.gl/pull/142 +- feat(core) support kepler.gl filter animate by interval keyframes by @heshan0131 in https://github.com/visgl/hubble.gl/pull/146 +- bug(core) fixed rendering while preview exception by @macrigiuseppe in https://github.com/visgl/hubble.gl/pull/147 + +#### hubble.gl [1.3.0-alpha.4] - Jul 8 2021 + +- enhancement(core) use layers from deckProps in createLayers, add mapboxLayerBeforeId prop by @heshan0131 in https://github.com/visgl/hubble.gl/pull/137 + +#### hubble.gl [1.3.0-alpha.3] - Jul 6 2021 + +- enhancement(core) Correct zoom scale and bounds in kepler video export by @chrisgervang in https://github.com/visgl/hubble.gl/pull/136 + +#### hubble.gl [1.3.0-alpha.2] - Jul 1 2021 + +- enhancement(core) Refine kepler.gl keyframe generation by @chrisgervang in https://github.com/visgl/hubble.gl/pull/135 + +#### hubble.gl [1.3.0-alpha.1] - Jun 29 2021 + +- fix(encoders) Copy gif options before assignment. by @chrisgervang in https://github.com/visgl/hubble.gl/pull/113 +- refactor(core) Make scene definition synchronous by supplying our own Timeline by @chrisgervang in https://github.com/visgl/hubble.gl/pull/112 +- chore(core) remove unnecessary readiness checks by @chrisgervang in https://github.com/visgl/hubble.gl/pull/116 +- chore(core) remove width and height from DeckScene by @chrisgervang in https://github.com/visgl/hubble.gl/pull/119 +- enhancement(core) split DeckScene keyframes up between layers and camera. by @chrisgervang in https://github.com/visgl/hubble.gl/pull/121 +- enhancement(core) new keyframe classes by @chrisgervang in https://github.com/visgl/hubble.gl/pull/125 +- enhancement(core) Introducing animation classes by @chrisgervang in https://github.com/visgl/hubble.gl/pull/127 +- chore(react) pass deckProps and staticMapProps to ExportVideoPanelContainer by @chrisgervang in https://github.com/visgl/hubble.gl/pull/128 +- chore(react) add dimension prop to QuickAnimation by @chrisgervang in https://github.com/visgl/hubble.gl/pull/129 +- enhancement(core) Replace DeckScene with AnimationManager by @chrisgervang in https://github.com/visgl/hubble.gl/pull/130 + +## hubble.gl v1.2 + +### hubble.gl v1.2 Prereleases + +#### hubble.gl [1.2.0-alpha.10] - Jun 10 2021 + +- feat(core) Add jpegQuality to GIF and default to 1.0 by @chrisgervang in https://github.com/visgl/hubble.gl/pull/74 +- feat(core) Use object parameters for functions by @chrisgervang in https://github.com/visgl/hubble.gl/pull/75 +- feat(core) Adding flyTo interpolator option to CameraKeyframes by @chrisgervang in https://github.com/visgl/hubble.gl/pull/87 +- feat(react) Add more hooks and improve isolation of kepler.gl within components by @chrisgervang in https://github.com/visgl/hubble.gl/pull/88 +- feat(react) Adding usePreviewHandler and useRenderHandler hook by @chrisgervang in https://github.com/visgl/hubble.gl/pull/89 +- feat(core) Adding extraProps to DeckAdapter by @chrisgervang in https://github.com/visgl/hubble.gl/pull/94 +- fix(core) odd dimensions cause encoder issues by @chrisgervang in https://github.com/visgl/hubble.gl/pull/95 +- feat(react) Adding PrintViewState for easier camera keyframe creation by @chrisgervang in https://github.com/visgl/hubble.gl/pull/96 +- feat(core) seek video and update frame by @chrisgervang in https://github.com/visgl/hubble.gl/pull/98 +- feat(react) add tripLayerKeyframe for Kepler Trip Layer support by @chrisgervang in https://github.com/visgl/hubble.gl/pull/101 +- feat(react) add SeekSlider UI component to preview animation by @chrisgervang in https://github.com/visgl/hubble.gl/pull/102 +- refactor(core) Remove duration, use timecode instead by @chrisgervang in https://github.com/visgl/hubble.gl/pull/104 +- refactor(core) Add timecode to examples by @chrisgervang in https://github.com/visgl/hubble.gl/pull/105 +- chore(core) rename encoderSettings to formatConfigs by @chrisgervang in https://github.com/visgl/hubble.gl/pull/106 +- chore(core) use Timeline instead of AnimationLoop by @chrisgervang in https://github.com/visgl/hubble.gl/pull/107 +- chore(core) remove data param from DeckScene by @chrisgervang in https://github.com/visgl/hubble.gl/pull/108 + +#### hubble.gl [1.2.0-alpha.9] - Apr 11 2021 + +- feat(react) Use the active map style by @chrisgervang in https://github.com/visgl/hubble.gl/pull/72 +- feat(react) Rendering Feedback Refinement by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/64 +- feat(react) Modal tabs separating "Edit" and "Export" by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/68 + +#### hubble.gl [1.2.0-alpha.8] - Jan 1 2021 + +- feat(react) Quick Animation Component by @chrisgervang in https://github.com/visgl/hubble.gl/pull/57 +- feat(react) Rendering feedback - Spinner by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/58 + +#### hubble.gl [1.2.0-alpha.7] - Dec 16 2020 + +- feat(core) Simplify camera keyframes setup by @chrisgervang in https://github.com/visgl/hubble.gl/pull/55 +- feat(core) Implementing keyframe system for deck.gl layers by @chrisgervang in https://github.com/visgl/hubble.gl/pull/56 + +#### hubble.gl [1.2.0-alpha.6] - Dec 11 2020 + +- feat(core) Add optional to DeckAdapter glContext for test-utils. by @chrisgervang in https://github.com/visgl/hubble.gl/pull/52 + +#### hubble.gl [1.2.0-alpha.5] - Dec 7 2020 + +- fix(react) Remove kepler.gl recursive includes by @unconed in https://github.com/visgl/hubble.gl/pull/51 + +#### hubble.gl [1.2.0-alpha.4] - Dec 7 2020 + +- chore(react) Simplify derived react state + cleanup by @unconed in https://github.com/visgl/hubble.gl/pull/48 +- chore(react) Kepler.GL integration tweaks by @unconed in https://github.com/visgl/hubble.gl/pull/49 + +#### hubble.gl [1.2.0-alpha.3] - Dec 4 2020 + +- chore(react) Removing Forked Kepler Code, Instead Hoisted Dep by @chrisgervang in https://github.com/visgl/hubble.gl/pull/45 +- feat(react) Modal now uses Mapbox, creation of duration sliders, and more resolution options by @RaymondDashWu in https://github.com/visgl/hubble.gl/pull/47 + +#### hubble.gl [1.2.0-alpha.2] - Nov 18 2020 + +- feat(react) Kepler.gl UI Integration by @chrisgervang in https://github.com/visgl/hubble.gl/pull/34 + +## hubble.gl v1.1 + +### hubble.gl v1.1 Prereleases + +#### hubble.gl [1.1.0-alpha.5] - Sep 11 2020 + +#### hubble.gl [1.1.0-alpha.4] - Jul 13 2020 + +- feat(react) Adding a ResolutionGuide component. by @chrisgervang in https://github.com/visgl/hubble.gl/pull/17 + +#### hubble.gl [1.1.0-alpha.3] - Jul 13 2020 + +- feat(core) Improve App Integration: Make Camera and Layers Optional in a DeckScene by @chrisgervang in https://github.com/visgl/hubble.gl/pull/15 + +#### hubble.gl [1.1.0-alpha.2] - Jun 11 2020 + +- fix(core) Filename (or any setting) wasn't refreshed between renders. by @chrisgervang in https://github.com/visgl/hubble.gl/pull/9 + +#### hubble.gl [1.1.0-alpha.1] - Jun 7 2020 + +- feat(core) Refactor encoder settings and scene settings api by @chrisgervang in https://github.com/visgl/hubble.gl/pull/8 +- feat(core) Gif Encoder by @chrisgervang in https://github.com/visgl/hubble.gl/pull/7 + +## hubble.gl v1.0 + +### hubble.gl v1.0 Prereleases + +#### hubble.gl [1.0.2-alpha.2] - Jun 6 2020 + +#### hubble.gl [1.0.2-alpha.1] - Jun 6 2020 + +#### hubble.gl [1.0.2-alpha.0] - Jun 6 2020 + +#### hubble.gl [1.0.1-alpha.0] - May 13 2020 diff --git a/package.json b/package.json index 066e5337..c310a170 100644 --- a/package.json +++ b/package.json @@ -16,10 +16,11 @@ "bootstrap": "yarn && ocular-bootstrap", "clean": "ocular-clean", "build": "npm run clean && ocular-build && lerna run build", - "version": "ocular-build core", + "version": "node scripts/verify-changelog.js && git add CHANGELOG.md", "lint": "ocular-lint", "cover": "ocular-test cover", - "publish": "ocular-publish", + "publish-beta": "ocular-publish version-only-beta", + "publish-prod": "ocular-publish version-only-prod", "test": "ocular-test", "test-ci": "ocular-lint && ocular-test node && ocular-test cover", "test-fast": "ocular-test fast", diff --git a/scripts/github-release.js b/scripts/github-release.js new file mode 100644 index 00000000..4e7f4346 --- /dev/null +++ b/scripts/github-release.js @@ -0,0 +1,53 @@ +import {execSync} from 'child_process'; +import {readFileSync} from 'fs'; + +// Get the latest tag +const tag = getGitTag(); +if (!tag) { + console.error('TAG NOT FOUND'); + process.exit(1); +} + +// Parse changelog +const changelog = getReleaseNotes(tag); +if (!changelog) { + console.error('CHANGELOG NOT FOUND'); + process.exit(1); +} + +// Publish release notes to GitHub +// https://docs.github.com/en/rest/reference/repos#create-a-release +const requestBody = { + tag_name: tag, + name: tag, + body: changelog, + prerelease: tag.search(/alpha|beta|rc/) > 0 +}; + +console.log(JSON.stringify(requestBody)); + +function getGitTag() { + try { + return execSync('git describe --tags --exact-match HEAD', { + stdio: [null, 'pipe', null], + encoding: 'utf-8' + }).trim(); + } catch (err) { + // not tagged + return null; + } +} + +function getReleaseNotes(version) { + let changelog = readFileSync('CHANGELOG.md', 'utf-8'); + const header = changelog.match(new RegExp(`^###.*\\b${version.replace('v', '')}\\b.*$`, 'm')); + if (!header) { + return null; + } + changelog = changelog.slice(header.index + header[0].length); + const endIndex = changelog.search(/^#/m); + if (endIndex > 0) { + changelog = changelog.slice(0, endIndex); + } + return changelog.trim(); +} diff --git a/scripts/verify-changelog.js b/scripts/verify-changelog.js new file mode 100644 index 00000000..db57c811 --- /dev/null +++ b/scripts/verify-changelog.js @@ -0,0 +1,13 @@ +/** + * Verifies that CHANGELOG has been updated before publishing a new version + */ +import {readFileSync} from 'fs'; + +const {version} = JSON.parse(readFileSync('lerna.json')); + +const changelog = readFileSync('CHANGELOG.md', 'utf-8'); +const header = changelog.match(new RegExp(`^###.*\\b${version}\\b.*$`, 'm')); +if (!header) { + console.error(`Cannot find an entry for ${version} in CHANGELOG.md`); + process.exit(1); +}