diff --git a/Makefile b/Makefile index b444917..88b794b 100644 --- a/Makefile +++ b/Makefile @@ -9,7 +9,7 @@ clean: %.zip: npm install --no-fund --no-package-lock --no-shrinkwrap mkdir -p nodejs/ - npm install --prefix nodejs/ lambdafs@~2.0.3 puppeteer-core@~10.1.0 --no-bin-links --no-fund --no-optional --no-package-lock --no-save --no-shrinkwrap + npm install --prefix nodejs/ lambdafs@~2.0.3 puppeteer-core@14.1.0 --no-bin-links --no-fund --no-optional --no-package-lock --no-save --no-shrinkwrap npm pack mkdir -p nodejs/node_modules/chrome-aws-lambda/ tar --directory nodejs/node_modules/chrome-aws-lambda/ --extract --file chrome-aws-lambda-*.tgz --strip-components=1 diff --git a/_/amazon/template.yml b/_/amazon/template.yml old mode 100755 new mode 100644 index 67f0741..589413a --- a/_/amazon/template.yml +++ b/_/amazon/template.yml @@ -12,36 +12,24 @@ Resources: LayerName: chrome-aws-lambda ContentUri: code/ CompatibleRuntimes: - - nodejs10.x - - nodejs12.x - nodejs14.x - node10: - Type: AWS::Serverless::Function - Properties: - Layers: - - !Ref layer - Handler: handlers/index.handler - Runtime: nodejs10.x - Policies: - - AWSLambdaBasicExecutionRole - - node12: + node14: Type: AWS::Serverless::Function Properties: Layers: - !Ref layer Handler: handlers/index.handler - Runtime: nodejs12.x + Runtime: nodejs14.x Policies: - AWSLambdaBasicExecutionRole - node14: + node16: Type: AWS::Serverless::Function Properties: Layers: - !Ref layer Handler: handlers/index.handler - Runtime: nodejs14.x + Runtime: nodejs16.x Policies: - AWSLambdaBasicExecutionRole diff --git a/_/ansible/inventory.ini b/_/ansible/inventory.ini old mode 100755 new mode 100644 index 2a91eb8..1e211a8 --- a/_/ansible/inventory.ini +++ b/_/ansible/inventory.ini @@ -3,8 +3,8 @@ [localhost:vars] ansible_connection=local -ansible_python_interpreter=python3 -image=ami-0de53d8956e8dcf80 +ansible_python_interpreter=python +image=ami-03425aeb2f345b9a9 region=us-east-1 [aws] @@ -13,4 +13,4 @@ region=us-east-1 ansible_connection=ssh ansible_python_interpreter=auto_silent ansible_ssh_private_key_file=ansible.pem -puppeteer_version=v10.1.0 +puppeteer_version=v14.1.0 diff --git a/_/ansible/plays/chromium.yml b/_/ansible/plays/chromium.yml index 7c58da7..e239bc4 100644 --- a/_/ansible/plays/chromium.yml +++ b/_/ansible/plays/chromium.yml @@ -86,26 +86,50 @@ - name: Installing Packages become: true become_user: root - yum: + dnf: name: - "@Development Tools" - - binutils - - bison - - bzip2 + - alsa-lib-devel + - atk-devel + - bc + - bluez-libs-devel + - brlapi-devel + - bzip2-devel + - cairo-devel - cmake - - curl + - cups-devel + - dbus-devel + - dbus-glib-devel - dbus-x11 - - flex - - git-core + - expat-devel + - glibc.i686 + - glibc-langpack-en - gperf - - patch + - gtk3-devel + - httpd + - java-11-openjdk-devel + - libatomic + - libcap-devel + - libjpeg-devel + - libstdc++.i686 + - libXScrnSaver-devel + - libxkbcommon-x11-devel + - mod_ssl + - ncurses-compat-libs + - nspr-devel + - nss-devel + - pam-devel + - pciutils-devel - perl + - php + - php-cli + - pulseaudio-libs-devel + - python + - python-psutil - python-setuptools - - python3 - - rpm - ruby - - subversion - - zip + - xorg-x11-server-Xvfb + - zlib.i686 state: latest update_cache: true @@ -158,26 +182,6 @@ path: /usr/local/bin/brotli register: brotli - - name: Cloning Brotli - git: - repo: https://github.com/google/brotli.git - dest: /srv/source/brotli - force: yes - update: yes - when: brotli.stat.exists != true - - - name: Compiling Brotli - become: true - become_user: root - shell: | - ./configure-cmake && \ - make && \ - make install - args: - chdir: /srv/source/brotli - creates: /usr/local/bin/brotli - when: brotli.stat.exists != true - - name: Cloning Depot Tools git: repo: https://chromium.googlesource.com/chromium/tools/depot_tools.git @@ -192,14 +196,14 @@ - name: Fetching Chromium shell: | - fetch chromium + fetch --nohooks chromium args: chdir: /srv/source/chromium when: gclient.stat.exists != true - name: Resolving Puppeteer Version uri: - url: "https://raw.githubusercontent.com/GoogleChrome/puppeteer/{{ puppeteer_version | default('main') }}/src/revisions.ts" + url: "https://raw.githubusercontent.com/puppeteer/puppeteer/{{ puppeteer_version | default('main') }}/src/revisions.ts" return_content: yes register: puppeteer_revisions @@ -214,15 +218,15 @@ return_content: yes register: revision - - name: Checking Out Git Commit + - name: Checking Out Chromium revision shell: | - git checkout {{ revision.json.git_sha }} + gclient sync --delete_unversioned_trees --revision {{ revision.json.git_sha }} --with_branch_heads args: - chdir: /srv/source/chromium/src + chdir: /srv/source/chromium - - name: Synchronizing Chromium + - name: Run Chromium hooks shell: | - gclient sync --with_branch_heads + gclient runhooks args: chdir: /srv/source/chromium @@ -274,28 +278,21 @@ content: | import("//build/args/headless.gn") blink_symbol_level = 0 - disable_ftp_support = true + dcheck_always_on = false disable_histogram_support = false enable_basic_print_dialog = false enable_basic_printing = true enable_keystone_registration_framework = false enable_linux_installer = false enable_media_remoting = false - enable_media_remoting_rpc = false - enable_nacl = false enable_one_click_signin = false ffmpeg_branding = "Chrome" - headless_use_embedded_resources = true - icu_use_data_file = false is_component_build = false is_debug = false proprietary_codecs = true symbol_level = 0 target_cpu = "x64" target_os = "linux" - use_bundled_fontconfig = true - use_cups = false - use_pulseaudio = false use_sysroot = true v8_target_cpu = "x64" dest: /srv/source/chromium/src/out/Headless/args.gn @@ -343,22 +340,22 @@ with_items: - "chromium-{{ version.stdout }}.br" - - name: Archiving SwiftShader + - name: Archiving OpenGL ES driver shell: | - tar --directory /srv/source/chromium/src/out/Headless/swiftshader --create --file swiftshader.tar libEGL.so libGLESv2.so + tar --directory /srv/source/chromium/src/out/Headless --create --file swiftshader.tar libEGL.so libGLESv2.so libvk_swiftshader.so libvulkan.so.1 vk_swiftshader_icd.json args: chdir: /srv/build/chromium creates: /srv/build/chromium/swiftshader.tar warn: false - - name: Compressing SwiftShader + - name: Compressing OpenGL ES driver shell: | brotli --best --force swiftshader.tar args: chdir: /srv/build/chromium creates: /srv/build/chromium/swiftshader.tar.br - - name: Downloading SwiftShader + - name: Downloading OpenGL ES driver fetch: src: /srv/build/chromium/swiftshader.tar.br dest: ../../../bin/ diff --git a/package.json b/package.json index d220714..a48848b 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "chrome-aws-lambda", "private": false, - "version": "10.1.0", + "version": "14.1.0", "author": { "name": "Alix Axel" }, @@ -15,7 +15,7 @@ "typings" ], "engines": { - "node": ">= 10.16" + "node": ">= 14" }, "scripts": { "build": "rimraf build && tsc -p tsconfig.json", @@ -28,12 +28,12 @@ }, "devDependencies": { "@types/node": "^10.17.55", - "puppeteer-core": "^10.1.0", + "puppeteer-core": "14.1.0", "rimraf": "^3.0.2", "typescript": "4.3.2" }, "peerDependencies": { - "puppeteer-core": "^10.1.0" + "puppeteer-core": "14.1.0" }, "bugs": { "url": "https://github.com/alixaxel/chrome-aws-lambda/issues" diff --git a/source/index.ts b/source/index.ts index cbfce35..0241d1b 100644 --- a/source/index.ts +++ b/source/index.ts @@ -7,7 +7,7 @@ import { join } from 'path'; import { PuppeteerNode, Viewport } from 'puppeteer-core'; import { URL } from 'url'; -if (/^AWS_Lambda_nodejs(?:10|12|14)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) { +if (/^AWS_Lambda_nodejs(?:10|12|14|16)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) { if (process.env.FONTCONFIG_PATH === undefined) { process.env.FONTCONFIG_PATH = '/tmp/aws'; } @@ -113,7 +113,8 @@ class Chromium { '--no-pings', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoPings&ss=chromium '--no-sandbox', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoSandbox&ss=chromium '--no-zygote', // https://source.chromium.org/search?q=lang:cpp+symbol:kNoZygote&ss=chromium - '--use-gl=swiftshader', // https://source.chromium.org/search?q=lang:cpp+symbol:kUseGl&ss=chromium + '--use-gl=angle', // https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md + '--use-angle=swiftshader', // https://chromium.googlesource.com/chromium/src/+/main/docs/gpu/swiftshader.md '--window-size=1920,1080', // https://source.chromium.org/search?q=lang:cpp+symbol:kWindowSize&ss=chromium ]; @@ -165,7 +166,7 @@ class Chromium { LambdaFS.inflate(`${input}/swiftshader.tar.br`), ]; - if (/^AWS_Lambda_nodejs(?:10|12|14)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) { + if (/^AWS_Lambda_nodejs(?:10|12|14|16)[.]x$/.test(process.env.AWS_EXECUTION_ENV) === true) { promises.push(LambdaFS.inflate(`${input}/aws.tar.br`)); } @@ -201,7 +202,7 @@ class Chromium { try { return require('puppeteer'); - } catch (error) { + } catch (error: any) { if (error.code !== 'MODULE_NOT_FOUND') { throw error; } diff --git a/source/puppeteer/lib/Browser.ts b/source/puppeteer/lib/Browser.ts index cbcc1b8..6ed3eff 100644 --- a/source/puppeteer/lib/Browser.ts +++ b/source/puppeteer/lib/Browser.ts @@ -4,9 +4,9 @@ import { Hook, Prototype } from '../../../typings/chrome-aws-lambda'; let Super: Prototype = null; try { - Super = require('puppeteer/lib/cjs/puppeteer/common/Browser').Browser; + Super = require('puppeteer/lib/cjs/puppeteer/common/Browser.js').Browser; } catch (error) { - Super = require('puppeteer-core/lib/cjs/puppeteer/common/Browser').Browser; + Super = require('puppeteer-core/lib/cjs/puppeteer/common/Browser.js').Browser; } Super.prototype.defaultPage = async function (...hooks: Hook[]) { diff --git a/source/puppeteer/lib/BrowserContext.ts b/source/puppeteer/lib/BrowserContext.ts index f1ba941..774ae4a 100644 --- a/source/puppeteer/lib/BrowserContext.ts +++ b/source/puppeteer/lib/BrowserContext.ts @@ -4,9 +4,9 @@ import { Hook, Prototype } from '../../../typings/chrome-aws-lambda'; let Super: Prototype = null; try { - Super = require('puppeteer/lib/cjs/puppeteer/common/Browser').BrowserContext; + Super = require('puppeteer/lib/cjs/puppeteer/common/Browser.js').BrowserContext; } catch (error) { - Super = require('puppeteer-core/lib/cjs/puppeteer/common/Browser').BrowserContext; + Super = require('puppeteer-core/lib/cjs/puppeteer/common/Browser.js').BrowserContext; } Super.prototype.defaultPage = async function (...hooks: Hook[]) { diff --git a/source/puppeteer/lib/ElementHandle.ts b/source/puppeteer/lib/ElementHandle.ts index 0b1c457..071a0fb 100644 --- a/source/puppeteer/lib/ElementHandle.ts +++ b/source/puppeteer/lib/ElementHandle.ts @@ -4,9 +4,9 @@ import { KeysOfType, Prototype } from '../../../typings/chrome-aws-lambda'; let Super: Prototype = null; try { - Super = require('puppeteer/lib/cjs/puppeteer/common/JSHandle').ElementHandle; + Super = require('puppeteer/lib/cjs/puppeteer/common/JSHandle.js').ElementHandle; } catch (error) { - Super = require('puppeteer-core/lib/cjs/puppeteer/common/JSHandle').ElementHandle; + Super = require('puppeteer-core/lib/cjs/puppeteer/common/JSHandle.js').ElementHandle; } Super.prototype.clear = function () { diff --git a/source/puppeteer/lib/FrameManager.ts b/source/puppeteer/lib/FrameManager.ts index dc14ce1..ea8c530 100644 --- a/source/puppeteer/lib/FrameManager.ts +++ b/source/puppeteer/lib/FrameManager.ts @@ -4,9 +4,9 @@ import { KeysOfType, Prototype } from '../../../typings/chrome-aws-lambda'; let Super: Prototype = null; try { - Super = require('puppeteer/lib/cjs/puppeteer/common/FrameManager').Frame; + Super = require('puppeteer/lib/cjs/puppeteer/common/FrameManager.js').Frame; } catch (error) { - Super = require('puppeteer-core/lib/cjs/puppeteer/common/FrameManager').Frame; + Super = require('puppeteer-core/lib/cjs/puppeteer/common/FrameManager.js').Frame; } Super.prototype.clear = function (selector: string) { diff --git a/source/puppeteer/lib/Page.ts b/source/puppeteer/lib/Page.ts index 18e8406..f959fa9 100644 --- a/source/puppeteer/lib/Page.ts +++ b/source/puppeteer/lib/Page.ts @@ -4,9 +4,9 @@ import { KeysOfType, Prototype } from '../../../typings/chrome-aws-lambda'; let Super: Prototype = null; try { - Super = require('puppeteer/lib/cjs/puppeteer/common/Page').Page; + Super = require('puppeteer/lib/cjs/puppeteer/common/Page.js').Page; } catch (error) { - Super = require('puppeteer-core/lib/cjs/puppeteer/common/Page').Page; + Super = require('puppeteer-core/lib/cjs/puppeteer/common/Page.js').Page; } Super.prototype.block = function (predicates: string[]) {