From 6361b83c054dad0c747872266fbeaeca1f58c1aa Mon Sep 17 00:00:00 2001 From: WatDuhHekBro <44940783+WatDuhHekBro@users.noreply.github.com> Date: Mon, 12 Apr 2021 09:02:19 -0500 Subject: [PATCH] Fixed GitHub Actions and addressed CodeQL issues --- .github/workflows/image.yml | 8 +++-- Dockerfile | 67 ++++++++++++++++++++++++++++++++++++- package.json | 3 ++ src/lib.ts | 8 +++-- 4 files changed, 80 insertions(+), 6 deletions(-) diff --git a/.github/workflows/image.yml b/.github/workflows/image.yml index c575066..27419b7 100644 --- a/.github/workflows/image.yml +++ b/.github/workflows/image.yml @@ -3,7 +3,6 @@ on: push: branches: - typescript - - docker jobs: analyze: @@ -16,9 +15,12 @@ jobs: fetch-depth: 2 - name: Setup Node.JS - uses: actions/setup-node@v2-beta + uses: actions/setup-node@v2 with: - node-version: "12" + node-version: "14" + # https://github.com/npm/cli/issues/558#issuecomment-580018468 + # Error: "npm ERR! fsevents not accessible from jest-haste-map" + # (supposed to just be a warning b/c optional dependency, but CI environment causes it to fail) - run: npm ci - name: Build codebase diff --git a/Dockerfile b/Dockerfile index ab33a22..cd595ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,69 @@ -FROM node:current-alpine +############### +# Solution #1 # +############### +# https://github.com/geekduck/docker-node-canvas +# Took 20m 55s + +#FROM node:12 +# +#RUN apt-get update \ +# && apt-get install -qq build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev +# +#RUN mkdir -p /opt/node/js \ +# && cd /opt/node \ +# && npm i canvas +# +#WORKDIR /opt/node/js +# +#ENTRYPOINT ["node"] + +############### +# Solution #2 # +############### +# https://github.com/Automattic/node-canvas/issues/729#issuecomment-352991456 +# Took 22m 50s + +#FROM ubuntu:xenial +# +#RUN apt-get update && apt-get install -y \ +# curl \ +# git +# +#RUN curl -sL https://deb.nodesource.com/setup_8.x | bash - \ +# && curl -sL https://deb.nodesource.com/setup_8.x | bash - \ +# && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \ +# && echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list +# +#RUN apt-get update && apt-get install -y \ +# nodejs \ +# yarn \ +# libcairo2-dev \ +# libjpeg-dev \ +# libpango1.0-dev \ +# libgif-dev \ +# libpng-dev \ +# build-essential \ +# g++ + +############### +# Solution #3 # +############### +# https://github.com/Automattic/node-canvas/issues/866#issuecomment-330001221 +# Took 7m 29s + +FROM node:10.16.0-alpine +FROM mhart/alpine-node:8.5.0 + +RUN apk add --no-cache \ + build-base \ + g++ \ + cairo-dev \ + jpeg-dev \ + pango-dev \ + bash \ + imagemagick + +# The rest of the commands to execute COPY . . diff --git a/package.json b/package.json index 74c35eb..3da03e0 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,9 @@ "tsc-watch": "^4.2.9", "typescript": "^3.9.7" }, + "optionalDependencies": { + "fsevents": "^2.1.2" + }, "author": "Keanu Timmermans", "license": "MIT", "keywords": [ diff --git a/src/lib.ts b/src/lib.ts index 490dd13..06ae42e 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -139,12 +139,16 @@ export interface GenericJSON { [key: string]: any; } +// In order to define a file to write to while also not: +// - Using the delete operator (which doesn't work on properties which cannot be undefined) +// - Assigning it first then using Object.defineProperty (which raises a flag on CodeQL) +// A non-null assertion is used on the class property to say that it'll definitely be assigned. export abstract class GenericStructure { - private __meta__ = "generic"; + private __meta__!: string; constructor(tag?: string) { - this.__meta__ = tag || this.__meta__; Object.defineProperty(this, "__meta__", { + value: tag || "generic", enumerable: false }); }