diff --git a/CHANGELOG.md b/CHANGELOG.md index 47cdc2e541..480aa3dff9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,69 @@ -# Changes merged into master +# Releases + +## Next (unreleased) + +### Enhancements + +* **Embedded mode:** Revisions to search and trace detail embed mode ([@tiffon](https://github.com/tiffon) in [#286](https://github.com/jaegertracing/jaeger-ui/pull/286)) + + * This release establishes our commitment to the `uiEmbed=v0` API + * A big thanks to [@aljesusg](https://github.com/aljesusg) for getting this off the ground in [#263](https://github.com/jaegertracing/jaeger-ui/pull/263)! :tada: + +* **Trace detail:** Add a TraceGraph to the TracePage ([@copa2](https://github.com/copa2) in [#276](https://github.com/jaegertracing/jaeger-ui/pull/276)) + + * Stability: Experimental – See [#293](https://github.com/jaegertracing/jaeger-ui/issues/293) for discussion. + * Big thanks to [@copa2](https://github.com/copa2) for the contribution! :tada: + * **We would love to hear feedback!** + +* **Trace detail:** Add a copy icon to entries in KeyValuesTable ([#204](https://github.com/jaegertracing/jaeger-ui/issues/204)) ([@everett980](https://github.com/everett980) in [#292](https://github.com/jaegertracing/jaeger-ui/pull/292)) + +* **Trace detail:** Add a Button to Reset Viewing Layer Zoom ([#215](https://github.com/jaegertracing/jaeger-ui/issues/215)) ([@everett980](https://github.com/everett980) in [#290](https://github.com/jaegertracing/jaeger-ui/pull/290)) + +* **Trace detail:** Add indent guides to trace timeline view ([#172](https://github.com/jaegertracing/jaeger-ui/issues/172)) ([@everett980](https://github.com/everett980) in [#297](https://github.com/jaegertracing/jaeger-ui/pull/297)) + +* **Search:** Add popover and prevent submit if duration params are invalid ([#244](https://github.com/jaegertracing/jaeger-ui/issues/244)) ([@everett980](https://github.com/everett980) in [#291](https://github.com/jaegertracing/jaeger-ui/pull/291)) + +* **Menu configuration:** Ability to open additional menu links in same tab (Resolves [#275](https://github.com/jaegertracing/jaeger-ui/issues/275)) ([@zablvit](https://github.com/zablvit) in [#278](https://github.com/jaegertracing/jaeger-ui/pull/278)) + +### Fixes + +* **Trace detail:** Fix [#269](https://github.com/jaegertracing/jaeger-ui/issues/269) - Fix column resizer overlays trace header ([@tiffon](https://github.com/tiffon) in [#280](https://github.com/jaegertracing/jaeger-ui/pull/280)) + +### Chores & Maintenance + +* **Dev docs:** Update a few links to the new website ([@ledor473](https://github.com/ledor473) in [#287](https://github.com/jaegertracing/jaeger-ui/pull/287)) + +* **Jaeger UI codebase:** Update create-react-app to 2.1.2 ([@tiffon](https://github.com/tiffon) in [#302](https://github.com/jaegertracing/jaeger-ui/pull/302)) + +## Changes released in Jaeger 1.8.2 and earlier + +These changes are listed in chronological order by the date they were merged into master. + +### [#263](https://github.com/jaegertracing/jaeger-ui/pull/263) Embedded components (SearchTraces and Tracepage ) ([@aljesusg](https://github.com/aljesusg)) + +### [#274](https://github.com/jaegertracing/jaeger-ui/pull/274) Fix rendering X axis in TraceResultsScatterPlot - pass milliseconds to moment.js ([@istrel](https://github.com/istrel)) + +### [#266](https://github.com/jaegertracing/jaeger-ui/pull/266) Use correct duration format for scatter plot ([@tiffon](https://github.com/tiffon)) + +### [#264](https://github.com/jaegertracing/jaeger-ui/pull/264) Fix collapse all issues ([@tiffon](https://github.com/tiffon)) + +### [#265](https://github.com/jaegertracing/jaeger-ui/pull/265) Fix Readme Error for setup local jaeger service ([@clyang82](https://github.com/clyang82)) + +### [#238](https://github.com/jaegertracing/jaeger-ui/pull/238) Span Search - Highlight search results ([@davit-y](https://github.com/davit-y)) + +### [#237](https://github.com/jaegertracing/jaeger-ui/pull/237) Span Search - Improve search logic ([@davit-y](https://github.com/davit-y)) + +### [#257](https://github.com/jaegertracing/jaeger-ui/pull/257) Use a sanely sized canvas for the span mini-map ([@tiffon](https://github.com/tiffon)) + +### [#234](https://github.com/jaegertracing/jaeger-ui/pull/234) Span Search - Add result count, navigation and clear buttons ([@davit-y](https://github.com/davit-y)) + +### [#228](https://github.com/jaegertracing/jaeger-ui/pull/228) Trace diffs ([@tiffon](https://github.com/tiffon)) + +### [#223](https://github.com/jaegertracing/jaeger-ui/pull/223) Add links to make values in tags or log properties clickable ([@divdavem](https://github.com/divdavem)) + +### [#230](https://github.com/jaegertracing/jaeger-ui/pull/230) Fix CollapseOne action ([@yuribit](https://github.com/yuribit)) + +### [#224](https://github.com/jaegertracing/jaeger-ui/pull/224) Directed graph React component ([@tiffon](https://github.com/tiffon)) ### [#221](https://github.com/jaegertracing/jaeger-ui/pull/221) Timeline Expand and Collapse Features diff --git a/package.json b/package.json index 6373ed4a97..6213bfb630 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,10 @@ { "private": true, "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "https://github.com/jaegertracing/jaeger-ui.git" + }, "devDependencies": { "babel-eslint": "9.x.x", "eslint": "5.6.0", @@ -14,6 +18,8 @@ "flow-bin": "^0.71.0", "glow": "^1.2.2", "husky": "1.3.1", + "isomorphic-fetch": "2.2.1", + "jsdom": "13.1.0", "lerna": "^2.10.2", "prettier": "^1.10.2", "rxjs-compat": "6.3.3" diff --git a/scripts/get-changelog.js b/scripts/get-changelog.js new file mode 100755 index 0000000000..db9013257e --- /dev/null +++ b/scripts/get-changelog.js @@ -0,0 +1,94 @@ +#!/usr/bin/env node + +// Copyright (c) 2019 Uber Technologies, Inc. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This code will generate changelog entries +// eslint-disable-next-line import/no-extraneous-dependencies +const fetch = require('isomorphic-fetch'); +// eslint-disable-next-line import/no-extraneous-dependencies +const jsdom = require('jsdom'); + +const DOMAIN = 'https://github.com/'; + +const URL_PARTS = [`${DOMAIN}jaegertracing/jaeger-ui/pulls?page=`, '&q=is%3Apr+is%3Amerged&utf8=%E2%9C%93']; + +function getData(elm) { + const title = elm.querySelector('[data-hovercard-type="pull_request"]').textContent; + const url = elm.querySelector('[data-hovercard-type="pull_request"]').href; + const pid = /#\d+/g.exec(elm.querySelector('.opened-by').textContent)[0]; + const user = elm.querySelector('[data-hovercard-type="user"]').textContent; + const dateMerged = new Date(elm.querySelector('[datetime]').getAttribute('datetime')); + return { title, url, pid, user, dateMerged }; +} + +function fmtPr(data) { + const { title, url, pid, user } = data; + return `- ${title} ([@${user}](https://github.com/${user}) in [${pid}](${url}))`; +} + +function compareMergedDates(a, b) { + return a.dateMerged > b.dateMerged ? 1 : Number(a.dateMerged === b.dateMerged) - 1; +} + +function getPrData(document) { + const wrapper = document.querySelector('[aria-label="Issues"]'); + const issues = [].slice.call(wrapper.querySelectorAll('.js-issue-row')); + const okIssues = issues.filter(elm => !elm.querySelector('[aria-label*="Closed"]')); + return okIssues.map(getData); +} + +function getMergedPrs(page) { + const _page = page == null || isNaN(page) ? 1 : Number(page); + const url = URL_PARTS.join(_page); + return ( + fetch(url) + .then(resp => resp.text()) + .then(textContent => { + const dom = new jsdom.JSDOM(textContent, { url: DOMAIN }); + return getPrData(dom.window.document); + }) + // eslint-disable-next-line no-console + .catch(error => console.error(error)) + ); +} + +function getChangelog(pages) { + const _pages = pages == null || isNaN(pages) ? 1 : Number(pages); + const promises = []; + for (let i = 1; i <= _pages; i++) { + promises.push(getMergedPrs(i)); + } + return ( + Promise.all(promises) + .then(groups => [].concat(...groups)) + .then(items => { + items.sort(compareMergedDates); + items.reverse(); + return items; + }) + // eslint-disable-next-line no-console + .catch(error => console.error(error)) + ); +} + +if (require.main === module) { + getChangelog(process.argv[2] || 1) + // eslint-disable-next-line no-console + .then(items => console.log(items.map(fmtPr).join('\n\n'))) + // eslint-disable-next-line no-console + .catch(error => console.error(error)); +} else { + module.exports = getChangelog; +} diff --git a/yarn.lock b/yarn.lock index 2d9e22a31d..f1208e8d4c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7740,7 +7740,7 @@ isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" -isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: +isomorphic-fetch@2.2.1, isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" dependencies: @@ -8172,7 +8172,7 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@>=11.0.0: +jsdom@13.1.0, jsdom@>=11.0.0: version "13.1.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.1.0.tgz#fa7356f0cc8111d0f1077cb7800d06f22f1d66c7" dependencies: