feat: Track current version (#2731)

This commit is contained in:
Lipis 2021-01-10 20:48:12 +02:00 committed by GitHub
parent 3a130cb102
commit 001880ba88
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 44 additions and 13 deletions

View File

@ -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) {

View File

@ -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"];

View File

@ -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,

View File

@ -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;
};