diff --git a/.github/workflows/manual-create-pd-pr.yaml b/.github/workflows/manual-create-pd-pr.yaml index 5ad191b75c..4dcd3f57a0 100644 --- a/.github/workflows/manual-create-pd-pr.yaml +++ b/.github/workflows/manual-create-pd-pr.yaml @@ -4,7 +4,11 @@ on: workflow_dispatch: inputs: release_version: - description: "Release version, e.g. v2021.07.09.1" + description: "Release version, e.g. v7.6.0-f7bbcdcf" + required: true + pd_branchs: + description: 'PD branch, e.g. ["master", "release-7.6"]' + default: '["master"]' required: true jobs: @@ -13,7 +17,8 @@ jobs: strategy: fail-fast: false matrix: - branch: [master, release-5.4, release-6.1] + # https://stackoverflow.com/questions/69781005/combine-dynamic-github-workflow-matrix-with-input-values-and-predefined-values + branch: ${{ fromJson(github.event.inputs.pd_branchs) }} name: Create PD PR - ${{ matrix.branch }} steps: - name: Check out PD code base @@ -23,7 +28,7 @@ jobs: ref: ${{ matrix.branch }} - uses: actions/setup-go@v3 with: - go-version: "1.18" + go-version: "1.21" - name: Load go module cache uses: actions/cache@v3 with: @@ -35,23 +40,17 @@ jobs: ${{ runner.os }}-go-pd- - name: Update TiDB Dashboard in PD code base run: | - go get -d "github.com/pingcap/tidb-dashboard@${{ github.event.inputs.release_version }}" - go mod tidy - make pd-server - go mod tidy - cd tests/client - go mod tidy - cd ../.. + scripts/update-dashboard.sh ${{ github.event.inputs.release_version }} - name: Commit PD code base change id: git_commit run: | git diff - git config user.name "tidb-dashboard-bot" - git config user.email "tidb-dashboard-bot@pingcap.com" + git config user.name "baurine" + git config user.email "2008.hbl@gmail.com" git add . if git status | grep -q "Changes to be committed" then - git commit --signoff --message "Update TiDB Dashboard to ${{ github.event.inputs.release_version }}, ref #4257" + git commit --signoff --message "chore(dashboard): update TiDB Dashboard to ${{ github.event.inputs.release_version }}" echo "::set-output name=committed::1" else echo "No changes detected, skipped" @@ -60,24 +59,28 @@ jobs: id: build_id run: echo "::set-output name=id::$(date +%s)" - name: Create PR based on PD code base + id: cpr uses: peter-evans/create-pull-request@v3 if: steps.git_commit.outputs.committed == 1 with: - token: ${{ secrets.BOT_PAT }} + push-to-fork: baurine/pd + token: ${{ secrets.PAT_TO_PUSH_PD_FORK }} branch: update-tidb-dashboard/${{ matrix.branch }}-${{ github.event.inputs.release_version }}-${{ steps.build_id.outputs.id }} - title: Update TiDB Dashboard to ${{ github.event.inputs.release_version }} [${{ matrix.branch }}] + title: "chore(dashboard): update TiDB Dashboard to ${{ github.event.inputs.release_version }} [${{ matrix.branch }}]" body: | ### What problem does this PR solve? Issue Number: ref #4257 - Update TiDB Dashboard to ${{ github.event.inputs.release_version }}. - - Upstream commit: https://github.com/${{ github.repository }}/commit/${{ github.sha }} . + Update TiDB Dashboard to [${{ github.event.inputs.release_version }}](https://github.com/pingcap/tidb-dashboard/releases/tag/${{ github.event.inputs.release_version }}). ### Release note ```release-note None ``` - push-to-fork: tidb-dashboard-bot/pd + - name: Check outputs + if: steps.git_commit.outputs.committed == 1 + run: | + echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}" + echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}" diff --git a/.github/workflows/release-check.yaml b/.github/workflows/release-check.yaml deleted file mode 100644 index f7d61571af..0000000000 --- a/.github/workflows/release-check.yaml +++ /dev/null @@ -1,19 +0,0 @@ -name: Release Check - -on: - pull_request: - branches: - - release - -jobs: - check_release_version: - runs-on: ubuntu-latest - steps: - - name: Checkout code and release branch - uses: actions/checkout@v2 - with: - fetch-depth: 0 - - name: Check release version - run: > - ! (git diff --name-only --exit-code origin/release -- ./release-version) - || (echo "Please update the release-version file" && false) diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 77264b25aa..03995c8d09 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -2,15 +2,14 @@ name: Release on: push: - branches: - - release + tags: + - "v*" + - "!v*-alpha" jobs: release: name: Release runs-on: ubuntu-latest - outputs: - release_version: v${{ steps.lookup_release_version.outputs.release_version }} steps: - name: Checkout code uses: actions/checkout@v3 @@ -37,10 +36,7 @@ jobs: key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- - - name: Lookup release version - id: lookup_release_version - run: | - echo "::set-output name=release_version::$(grep -v '^#' ./release-version)" + - name: Build UI env: REACT_APP_MIXPANEL_TOKEN: ${{ secrets.REACT_APP_MIXPANEL_TOKEN }} @@ -50,16 +46,23 @@ jobs: working-directory: ui/packages/tidb-dashboard-for-op/dist run: | zip -r ../static-assets.zip . + + # TODO: generate changelog + # - name: Generate Changelog + # id: build_changelog + # uses: mikepenz/release-changelog-builder-action@v4.1.0 - name: Create release id: create_release uses: fleskesvor/create-release@feature/support-target-commitish env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - tag_name: v${{ steps.lookup_release_version.outputs.release_version }} - release_name: Internal Version ${{ steps.lookup_release_version.outputs.release_version }} + tag_name: ${{ github.ref }} + release_name: Internal Version ${{ github.ref }} draft: false prerelease: false + # body: ${{steps.build_changelog.outputs.changelog}} + - name: Upload UI assets uses: actions/upload-release-asset@v1.0.1 env: @@ -85,78 +88,3 @@ jobs: asset_path: ./embedded-assets-golang.zip asset_name: embedded-assets-golang.zip asset_content_type: application/zip - pd_pr: - if: "!contains(github.event.head_commit.message, 'skip pd_pr')" - name: Create PD PR - runs-on: ubuntu-latest - needs: release - strategy: - fail-fast: false - matrix: - branch: [master, release-5.4, release-6.1] - steps: - - name: Check out PD code base - uses: actions/checkout@v3 - with: - repository: tikv/pd - ref: ${{ matrix.branch }} - - uses: actions/setup-go@v3 - with: - go-version: "1.18" - - name: Load go module cache - uses: actions/cache@v3 - with: - path: | - ~/.cache/go-build - ~/go/pkg/mod - key: ${{ runner.os }}-go-pd-${{ hashFiles('**/go.sum') }} - restore-keys: | - ${{ runner.os }}-go-pd- - - name: Update TiDB Dashboard in PD code base - run: | - go get -d "github.com/pingcap/tidb-dashboard@${{ needs.release.outputs.release_version }}" - go mod tidy - make pd-server - go mod tidy - cd tests/client - go mod tidy - cd ../.. - - name: Commit PD code base change - id: git_commit - run: | - git diff - git config user.name "tidb-dashboard-bot" - git config user.email "tidb-dashboard-bot@pingcap.com" - git add . - if git status | grep -q "Changes to be committed" - then - git commit --signoff --message "Update TiDB Dashboard to ${{ needs.release.outputs.release_version }}, ref #4257" - echo "::set-output name=committed::1" - else - echo "No changes detected, skipped" - fi - - name: Set build ID - id: build_id - run: echo "::set-output name=id::$(date +%s)" - - name: Create PR based on PD code base - uses: peter-evans/create-pull-request@v3 - if: steps.git_commit.outputs.committed == 1 - with: - token: ${{ secrets.BOT_PAT }} - branch: update-tidb-dashboard/${{ matrix.branch }}-${{ needs.release.outputs.release_version }}-${{ steps.build_id.outputs.id }} - title: Update TiDB Dashboard to ${{ needs.release.outputs.release_version }} [${{ matrix.branch }}] - body: | - ### What problem does this PR solve? - - Issue Number: ref #4257 - - This is an automatic updating PR for TiDB Dashboard. See #4257 for details. - - This PR updates TiDB Dashboard to ${{ needs.release.outputs.release_version }} for upstream commit: https://github.com/${{ github.repository }}/commit/${{ github.sha }} . - - ### Release note - - ```release-note - None - ``` - push-to-fork: tidb-dashboard-bot/pd diff --git a/.github/workflows/test-docker-image.yaml b/.github/workflows/test-docker-image.yaml index b9ce5ad2d6..372d81243a 100644 --- a/.github/workflows/test-docker-image.yaml +++ b/.github/workflows/test-docker-image.yaml @@ -25,7 +25,7 @@ jobs: uses: docker/setup-buildx-action@v2 - name: Read VERSION file id: getversion - run: echo "::set-output name=version::$(grep -v '^\#' ./release-version)" + run: echo "::set-output name=version::$(git describe --tags --dirty --always)" - name: Build uses: docker/build-push-action@v3 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ab3215d133..7378249ea6 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -150,6 +150,16 @@ If you want to develop docker image locally 🤔. > The old Dashboard **_in PD_** can be accessed at [http://localhost:2379/dashboard](http://localhost:2379/dashboard). +### How to update TiDB Dashboard in PD + +To update the TiDB Dashboard in PD, we need to release a TiDB Dashboard version and submit a PR to PD. + +1. In a release branch, likes `release-7.6`, run `make tag` to add a new tag for TiDB Dashboard. The new tag is like `v7.6.x-`. + +1. Push the new tag to the remote repository, it will trigger the CI to release a new TiDB Dashboard version. + +1. After the new version is created, go to https://github.com/pingcap/tidb-dashboard/actions/workflows/manual-create-pd-pr.yaml, click `Run workflow` button, fill the required parameters and submit the workflow, it will trigger the CI to create a PR to PD which will update the TiDB Dashboard version in PD. + ## Contribution flow This is a rough outline of what a contributor's workflow looks like: diff --git a/Makefile b/Makefile index fadac3e37c..916f206f45 100755 --- a/Makefile +++ b/Makefile @@ -14,7 +14,7 @@ E2E_SPEC ?= UI ?= -RELEASE_VERSION := $(shell grep -v '^\#' ./release-version) +RELEASE_VERSION := $(shell git describe --tags --dirty --always) LDFLAGS += -X "$(DASHBOARD_PKG)/pkg/utils/version.InternalVersion=$(RELEASE_VERSION)" LDFLAGS += -X "$(DASHBOARD_PKG)/pkg/utils/version.Standalone=Yes" @@ -37,7 +37,6 @@ NO_CACHE ?= BUILD_GOEXPERIMENT ?= BUILD_CGO_ENABLED ?= ifeq ("${ENABLE_FIPS}", "1") - RELEASE_VERSION := $(RELEASE_VERSION)-fips BUILD_TAGS += boringcrypto BUILD_GOEXPERIMENT = GOEXPERIMENT=boringcrypto BUILD_CGO_ENABLED = CGO_ENABLED=1 @@ -158,6 +157,10 @@ docker-build-image-locally-arm64: clean docker buildx build ${NO_CACHE} --load -t $(IMAGE) --platform $(ARM64) -f $(DOCKERFILE) . docker run --rm $(IMAGE) -v +.PHONY: tag +tag: + node scripts/create_release_tag.js + .PHONY: run # please ensure that tiup playground is running in the background. run: bin/tidb-dashboard --debug --experimental --feature-version "$(FEATURE_VERSION)" --host 0.0.0.0 diff --git a/scripts/create_release_tag.js b/scripts/create_release_tag.js new file mode 100644 index 0000000000..5d80af894d --- /dev/null +++ b/scripts/create_release_tag.js @@ -0,0 +1,57 @@ +// This scripts is used to create a new release tag for the current release branch +// when we need to submit a PR to PD for updating the tidb-dashboard. +// After this tag is pushed, it will trigger the CI to build a new tidb-dashboard release version. +// Then we can run the manual-create-pd-pr.yaml workflow in the GitHub to create a PR to PD. + +const { execSync } = require('child_process'); + +function getGitBranch() { + // master, release-7.6 + return execSync('git rev-parse --abbrev-ref HEAD').toString().trim(); +} + +function getGitShortSha() { + // eb69e4fd + return execSync('git rev-parse --short HEAD').toString().trim(); +} + +function getGitLatestTag() { + // v7.6.0-alpha, v7.6.0-, v7.6.0, v7.6.1-, v7.6.1 + return execSync('git describe --tags --dirty --always').toString().trim(); +} + +function createReleaseTag() { + const branch = getGitBranch(); + + if (!branch.match(/release-\d.\d$/)) { + console.error('Err: this is not a valid release branch'); + return + } + + const branchVer = branch.replace('release-', ''); + const latestTag = getGitLatestTag().replace('-fips', ''); + + if (!latestTag.startsWith(`v${branchVer}.`)) { + console.error(`Err: latest tag ${latestTag} doesn't match the branch ${branch}, you need to add the new tag manually`); + return + } + + const shortSha = getGitShortSha(); + const splitPos = latestTag.indexOf('-'); + let nextTag = '' + if (splitPos === -1) { + // the latest tag likes v7.6.0, v7.6.1 + // then the next tag should be v7.6.1- for v7.6.0, v7.6.2- for v7.6.1 + const suffix = latestTag.replace(`v${branchVer}.`, ''); + nextTag = `v${branchVer}.${parseInt(suffix) + 1}-${shortSha}`; + } else { + // the latest tag likes v7.6.0-, v7.6.1- + // then the next tag should be v7.6.0- for v7.6.0-, v7.6.1- for v7.6.1- + const prefix = latestTag.substring(0, splitPos); + nextTag = `${prefix}-${shortSha}`; + } + execSync(`git tag ${nextTag}`); + console.log(`Created tag ${nextTag}`) +} + +createReleaseTag() diff --git a/ui/.env.development b/ui/.env.development index a688729a85..d802e84ad0 100644 --- a/ui/.env.development +++ b/ui/.env.development @@ -1,7 +1,5 @@ PORT=3001 PUBLIC_URL='/dashboard' REACT_APP_VERSION=$npm_package_version -# REACT_APP_RELEASE_VERSION is set in config-overrides.js -REACT_APP_RELEASE_VERSION=unknown REACT_APP_MIXPANEL_HOST=https://telemetry.pingcap.com/api/v1/dashboard/report REACT_APP_MIXPANEL_TOKEN= \ No newline at end of file diff --git a/ui/packages/tidb-dashboard-for-op/builder.js b/ui/packages/tidb-dashboard-for-op/builder.js index 96607ab3de..8e3bc868a4 100755 --- a/ui/packages/tidb-dashboard-for-op/builder.js +++ b/ui/packages/tidb-dashboard-for-op/builder.js @@ -48,20 +48,6 @@ const devServerParams = { ] } -function getInternalVersion() { - const version = fs - .readFileSync('../../../release-version', 'utf8') - .split(os.EOL) - .map((l) => l.trim()) - .filter((l) => !l.startsWith('#') && l !== '')[0] - if (version === '') { - throw new Error( - `invalid release version, please check the release-version file` - ) - } - return version -} - function genDefine() { const define = {} for (const k in process.env) { @@ -75,10 +61,6 @@ function genDefine() { define[`process.env.${k}`] = JSON.stringify(envVal) } } - // REACT_APP_RELEASE_VERSION was used in sentry before - define['process.env.REACT_APP_RELEASE_VERSION'] = JSON.stringify( - getInternalVersion() - ) define['process.env.E2E_TEST'] = JSON.stringify(process.env.E2E_TEST) return define }