feat: Track current version (#2731)
This commit is contained in:
parent
3a130cb102
commit
001880ba88
@ -5,23 +5,40 @@ const path = require("path");
|
|||||||
const versionFile = path.join("build", "version.json");
|
const versionFile = path.join("build", "version.json");
|
||||||
const indexFile = path.join("build", "index.html");
|
const indexFile = path.join("build", "index.html");
|
||||||
|
|
||||||
const zero = (digit) => `0${digit}`.slice(-2);
|
const versionDate = (date) => date.toISOString().replace(".000", "");
|
||||||
|
|
||||||
const versionDate = (date) => {
|
const commitHash = () => {
|
||||||
const date_ = `${date.getFullYear()}-${zero(date.getMonth() + 1)}-${zero(
|
try {
|
||||||
date.getDate(),
|
return require("child_process")
|
||||||
)}`;
|
.execSync("git rev-parse --short HEAD")
|
||||||
const time = `${zero(date.getHours())}-${zero(date.getMinutes())}-${zero(
|
.toString()
|
||||||
date.getSeconds(),
|
.trim();
|
||||||
)}`;
|
} catch {
|
||||||
return `${date_}-${time}`;
|
return "none";
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const now = new Date();
|
const commitDate = (hash) => {
|
||||||
|
try {
|
||||||
|
const unix = require("child_process")
|
||||||
|
.execSync(`git show -s --format=%ct ${hash}`)
|
||||||
|
.toString()
|
||||||
|
.trim();
|
||||||
|
const date = new Date(parseInt(unix) * 1000);
|
||||||
|
return versionDate(date);
|
||||||
|
} catch {
|
||||||
|
return versionDate(new Date());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const getFullVersion = () => {
|
||||||
|
const hash = commitHash();
|
||||||
|
return `${commitDate(hash)}-${hash}`;
|
||||||
|
};
|
||||||
|
|
||||||
const data = JSON.stringify(
|
const data = JSON.stringify(
|
||||||
{
|
{
|
||||||
version: versionDate(now),
|
version: getFullVersion(),
|
||||||
},
|
},
|
||||||
undefined,
|
undefined,
|
||||||
2,
|
2,
|
||||||
@ -34,7 +51,7 @@ fs.readFile(indexFile, "utf8", (error, data) => {
|
|||||||
if (error) {
|
if (error) {
|
||||||
return console.error(error);
|
return console.error(error);
|
||||||
}
|
}
|
||||||
const result = data.replace(/{version}/g, versionDate(now));
|
const result = data.replace(/{version}/g, getFullVersion());
|
||||||
|
|
||||||
fs.writeFile(indexFile, result, "utf8", (error) => {
|
fs.writeFile(indexFile, result, "utf8", (error) => {
|
||||||
if (error) {
|
if (error) {
|
||||||
|
@ -70,6 +70,7 @@ export const DEFAULT_FONT_SIZE = 20;
|
|||||||
export const DEFAULT_FONT_FAMILY: FontFamily = 1;
|
export const DEFAULT_FONT_FAMILY: FontFamily = 1;
|
||||||
export const DEFAULT_TEXT_ALIGN = "left";
|
export const DEFAULT_TEXT_ALIGN = "left";
|
||||||
export const DEFAULT_VERTICAL_ALIGN = "top";
|
export const DEFAULT_VERTICAL_ALIGN = "top";
|
||||||
|
export const DEFAULT_VERSION = "{version}";
|
||||||
|
|
||||||
export const CANVAS_ONLY_ACTIONS = ["selectAll"];
|
export const CANVAS_ONLY_ACTIONS = ["selectAll"];
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@ import React, {
|
|||||||
useRef,
|
useRef,
|
||||||
useState,
|
useState,
|
||||||
} from "react";
|
} from "react";
|
||||||
|
import { trackEvent } from "../analytics";
|
||||||
import { getDefaultAppState } from "../appState";
|
import { getDefaultAppState } from "../appState";
|
||||||
import { ExcalidrawImperativeAPI } from "../components/App";
|
import { ExcalidrawImperativeAPI } from "../components/App";
|
||||||
import { ErrorDialog } from "../components/ErrorDialog";
|
import { ErrorDialog } from "../components/ErrorDialog";
|
||||||
@ -22,7 +23,12 @@ import Excalidraw, {
|
|||||||
languages,
|
languages,
|
||||||
} from "../packages/excalidraw/index";
|
} from "../packages/excalidraw/index";
|
||||||
import { AppState, ExcalidrawAPIRefValue } from "../types";
|
import { AppState, ExcalidrawAPIRefValue } from "../types";
|
||||||
import { debounce, ResolvablePromise, resolvablePromise } from "../utils";
|
import {
|
||||||
|
debounce,
|
||||||
|
getVersion,
|
||||||
|
ResolvablePromise,
|
||||||
|
resolvablePromise,
|
||||||
|
} from "../utils";
|
||||||
import { SAVE_TO_LOCAL_STORAGE_TIMEOUT } from "./app_constants";
|
import { SAVE_TO_LOCAL_STORAGE_TIMEOUT } from "./app_constants";
|
||||||
import CollabWrapper, { CollabAPI } from "./collab/CollabWrapper";
|
import CollabWrapper, { CollabAPI } from "./collab/CollabWrapper";
|
||||||
import { LanguageList } from "./components/LanguageList";
|
import { LanguageList } from "./components/LanguageList";
|
||||||
@ -223,6 +229,7 @@ function ExcalidrawWrapper(props: { collab: CollabAPI }) {
|
|||||||
const { collab } = props;
|
const { collab } = props;
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
trackEvent("load", "version", getVersion());
|
||||||
excalidrawRef.current!.readyPromise.then((excalidrawApi) => {
|
excalidrawRef.current!.readyPromise.then((excalidrawApi) => {
|
||||||
initializeScene({
|
initializeScene({
|
||||||
resetScene: excalidrawApi.resetScene,
|
resetScene: excalidrawApi.resetScene,
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import colors from "./colors";
|
import colors from "./colors";
|
||||||
import {
|
import {
|
||||||
CURSOR_TYPE,
|
CURSOR_TYPE,
|
||||||
|
DEFAULT_VERSION,
|
||||||
FONT_FAMILY,
|
FONT_FAMILY,
|
||||||
WINDOWS_EMOJI_FALLBACK_FONT,
|
WINDOWS_EMOJI_FALLBACK_FONT,
|
||||||
} from "./constants";
|
} from "./constants";
|
||||||
@ -361,3 +362,8 @@ export const nFormatter = (num: number, digits: number): string => {
|
|||||||
(num / si[index].value).toFixed(digits).replace(rx, "$1") + si[index].symbol
|
(num / si[index].value).toFixed(digits).replace(rx, "$1") + si[index].symbol
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
export const getVersion = () => {
|
||||||
|
const version = document.querySelector('meta[name="version"]');
|
||||||
|
return version ? (version as any).content : DEFAULT_VERSION;
|
||||||
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user