feat: implement version bump workflow and display app version on DashboardPage
This commit is contained in:
60
.github/workflows/bump-version.yml
vendored
Normal file
60
.github/workflows/bump-version.yml
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
name: Bump Frontend Version
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
inputs:
|
||||||
|
bump:
|
||||||
|
description: Version bump type
|
||||||
|
required: true
|
||||||
|
default: patch
|
||||||
|
type: choice
|
||||||
|
options:
|
||||||
|
- patch
|
||||||
|
- minor
|
||||||
|
- major
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
bump-version:
|
||||||
|
name: Bump frontend package version
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Set up Node 20
|
||||||
|
uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "20"
|
||||||
|
|
||||||
|
- name: Bump frontend version
|
||||||
|
working-directory: frontend
|
||||||
|
run: npm version ${{ inputs.bump }} --no-git-tag-version
|
||||||
|
|
||||||
|
- name: Commit and push version update
|
||||||
|
run: |
|
||||||
|
git config user.name "github-actions[bot]"
|
||||||
|
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||||
|
git add frontend/package.json
|
||||||
|
if [ -f frontend/package-lock.json ]; then
|
||||||
|
git add frontend/package-lock.json
|
||||||
|
fi
|
||||||
|
if git diff --cached --quiet; then
|
||||||
|
echo "No version changes to commit"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
NEW_VERSION=$(node -p "require('./frontend/package.json').version")
|
||||||
|
TAG_NAME="frontend-v${NEW_VERSION}"
|
||||||
|
git commit -m "chore(frontend): bump version to ${NEW_VERSION}"
|
||||||
|
if git rev-parse "${TAG_NAME}" >/dev/null 2>&1; then
|
||||||
|
echo "Tag ${TAG_NAME} already exists"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
git tag -a "${TAG_NAME}" -m "Frontend ${NEW_VERSION}"
|
||||||
|
git push
|
||||||
|
git push origin "${TAG_NAME}"
|
||||||
11
frontend/src/__tests__/pages/DashboardPage.test.tsx
Normal file
11
frontend/src/__tests__/pages/DashboardPage.test.tsx
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import { render, screen } from '@testing-library/react'
|
||||||
|
import { describe, expect, it } from 'vitest'
|
||||||
|
import DashboardPage from '@/pages/DashboardPage'
|
||||||
|
|
||||||
|
describe('DashboardPage', () => {
|
||||||
|
it('should_display_app_version_when_rendered', () => {
|
||||||
|
render(<DashboardPage />)
|
||||||
|
|
||||||
|
expect(screen.getByText(/version 0.1.0/i)).toBeInTheDocument()
|
||||||
|
})
|
||||||
|
})
|
||||||
@@ -1,8 +1,11 @@
|
|||||||
export default function DashboardPage() {
|
export default function DashboardPage() {
|
||||||
|
const appVersion = __APP_VERSION__
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="p-8">
|
<div className="p-8">
|
||||||
<h1 className="text-2xl font-bold text-gray-900">Dashboard</h1>
|
<h1 className="text-2xl font-bold text-gray-900">Dashboard</h1>
|
||||||
<p className="mt-2 text-sm text-gray-500">Dashboard — coming in Step 11.</p>
|
<p className="mt-2 text-sm text-gray-500">Dashboard — coming in Step 11.</p>
|
||||||
|
<p className="mt-2 text-xs text-gray-400">Version {appVersion}</p>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
3
frontend/src/vite-env.d.ts
vendored
Normal file
3
frontend/src/vite-env.d.ts
vendored
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/// <reference types="vite/client" />
|
||||||
|
|
||||||
|
declare const __APP_VERSION__: string
|
||||||
@@ -1,10 +1,14 @@
|
|||||||
import { defineConfig } from 'vite'
|
import { defineConfig } from 'vite'
|
||||||
import react from '@vitejs/plugin-react'
|
import react from '@vitejs/plugin-react'
|
||||||
import path from 'path'
|
import path from 'path'
|
||||||
|
import packageJson from './package.json'
|
||||||
|
|
||||||
// https://vitejs.dev/config/
|
// https://vitejs.dev/config/
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
plugins: [react()],
|
plugins: [react()],
|
||||||
|
define: {
|
||||||
|
__APP_VERSION__: JSON.stringify(packageJson.version),
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
alias: {
|
alias: {
|
||||||
'@': path.resolve(__dirname, './src'),
|
'@': path.resolve(__dirname, './src'),
|
||||||
|
|||||||
Reference in New Issue
Block a user