diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 9ef47ea..6b4c97c 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -14,8 +14,8 @@ For Puppeteer-specific bugs, please refer to: https://github.com/GoogleChrome/pu * `chrome-aws-lambda` Version: * `puppeteer` / `puppeteer-core` Version: * OS: -* Node.js Version: -* Lambda / GCF Runtime: +* Node.js Version: +* Lambda / GCF Runtime: ## Expected Behavior diff --git a/.github/workflows/aws.yml b/.github/workflows/aws.yml index 616f119..9da907b 100644 --- a/.github/workflows/aws.yml +++ b/.github/workflows/aws.yml @@ -40,7 +40,6 @@ jobs: event: - example.com version: - - 10 - 12 - 14 steps: diff --git a/Makefile b/Makefile index b444917..dad05f2 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@~12.0.1 --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/README.md b/README.md index ec2cf98..3984023 100644 --- a/README.md +++ b/README.md @@ -255,6 +255,7 @@ This package is versioned based on the underlying `puppeteer` minor version: | `puppeteer` Version | `chrome-aws-lambda` Version | Chromium Revision | | ------------------- | --------------------------------- | ---------------------------------------------------- | +| `12.0.*` | `npm i chrome-aws-lambda@~12.0.0` | [`938248`](https://crrev.com/938248) (`97.0.4691.0`) | | `10.1.*` | `npm i chrome-aws-lambda@~10.1.0` | [`884014`](https://crrev.com/884014) (`92.0.4512.0`) | | `10.0.*` | `npm i chrome-aws-lambda@~10.0.0` | [`884014`](https://crrev.com/884014) (`92.0.4512.0`) | | `9.1.*` | `npm i chrome-aws-lambda@~9.1.0` | [`869685`](https://crrev.com/869685) (`91.0.4469.0`) | diff --git a/_/amazon/events/example.com.json b/_/amazon/events/example.com.json index 3bca264..e3918f7 100644 --- a/_/amazon/events/example.com.json +++ b/_/amazon/events/example.com.json @@ -3,14 +3,14 @@ "url": "https://example.com", "expected": { "title": "Example Domain", - "screenshot": "aabec363d69b6ae44bd17d4724bab665767d56f2" + "screenshot": "5be64ad7fd9db18ee1c345ab8a33f3ce1c6be339" } }, { "url": "https://example.com", "expected": { "title": "Example Domain", - "screenshot": "aabec363d69b6ae44bd17d4724bab665767d56f2" + "screenshot": "5be64ad7fd9db18ee1c345ab8a33f3ce1c6be339" } } ] diff --git a/_/amazon/template.yml b/_/amazon/template.yml index 67f0741..6cae633 100755 --- a/_/amazon/template.yml +++ b/_/amazon/template.yml @@ -12,20 +12,9 @@ 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: Type: AWS::Serverless::Function Properties: diff --git a/_/ansible/inventory.ini b/_/ansible/inventory.ini index 2a91eb8..9f5ee6e 100755 --- a/_/ansible/inventory.ini +++ b/_/ansible/inventory.ini @@ -4,7 +4,7 @@ [localhost:vars] ansible_connection=local ansible_python_interpreter=python3 -image=ami-0de53d8956e8dcf80 +image=ami-083654bd07b5da81d 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=v12.0.0 diff --git a/_/ansible/plays/chromium.yml b/_/ansible/plays/chromium.yml index 7c58da7..2ea9904 100644 --- a/_/ansible/plays/chromium.yml +++ b/_/ansible/plays/chromium.yml @@ -39,13 +39,13 @@ ec2: group: Chromium image: "{{ image }}" - instance_type: c5.18xlarge + instance_type: c5a.8xlarge instance_initiated_shutdown_behavior: terminate key_name: ansible wait: yes zone: "{{ region }}a" spot_type: one-time - spot_price: "1.25" + spot_price: "1.00" spot_wait_timeout: 300 spot_launch_group: chromium region: "{{ region }}" @@ -74,7 +74,7 @@ with_items: "{{ ec2.instances }}" - name: AWS - user: ec2-user + user: ubuntu hosts: aws gather_facts: true environment: @@ -86,26 +86,11 @@ - name: Installing Packages become: true become_user: root - yum: + apt: name: - - "@Development Tools" - - binutils - - bison - - bzip2 + - brotli - cmake - - curl - - dbus-x11 - - flex - - git-core - - gperf - - patch - - perl - - python-setuptools - - python3 - - rpm - - ruby - - subversion - - zip + - htop state: latest update_cache: true @@ -133,52 +118,20 @@ warn: false when: nvme.stat.exists - - name: Checking for Directory Structure - stat: - path: /srv/source/chromium - register: - structure - - name: Creating Directory Structure become: true become_user: root file: path: /srv/{{ item }}/chromium state: directory - group: ec2-user - owner: ec2-user recurse: true with_items: - build - source - when: structure.stat.exists != true - - - name: Checking for Brotli - stat: - 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 + - name: Cloning Depot Tools 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 dest: /srv/source/depot_tools @@ -186,17 +139,30 @@ update: yes - name: Checking for Chromium + become: true + become_user: root stat: path: /srv/source/chromium/.gclient register: gclient - name: Fetching Chromium + become: true + become_user: root shell: | - fetch chromium + fetch --nohooks chromium args: chdir: /srv/source/chromium when: gclient.stat.exists != true + - name: Installing Build Dependencies + become: true + become_user: root + shell: | + ./build/install-build-deps.sh --no-prompt + args: + chdir: /srv/source/chromium/src + when: gclient.stat.exists != true + - name: Resolving Puppeteer Version uri: url: "https://raw.githubusercontent.com/GoogleChrome/puppeteer/{{ puppeteer_version | default('main') }}/src/revisions.ts" @@ -204,29 +170,31 @@ register: puppeteer_revisions - name: Resolving Chromium Revision from Puppeteer Version + become: true + become_user: root set_fact: chromium_revision: > {{ puppeteer_revisions.content | regex_search("chromium: [']([0-9]+)[']", '\1') | first }} - name: Resolving Git Commit from Chromium Revision + become: true + become_user: root uri: url: "https://cr-rev.appspot.com/_ah/api/crrev/v1/redirect/{{ chromium_revision }}" return_content: yes register: revision - - name: Checking Out Git Commit - shell: | - git checkout {{ revision.json.git_sha }} - args: - chdir: /srv/source/chromium/src - - name: Synchronizing Chromium + become: true + become_user: root shell: | - gclient sync --with_branch_heads + gclient sync --delete_unversioned_trees --revision src@{{ revision.json.git_sha }} --with_branch_heads args: chdir: /srv/source/chromium - name: Patching Chromium + become: true + become_user: root lineinfile: path: "/srv/source/chromium/src/content/browser/{{ item.path }}" line: "{{ item.line }}" @@ -256,10 +224,12 @@ } - name: Creating Build Configuration Directory + become: true + become_user: root file: - mode: 0755 path: /srv/source/chromium/src/out/Headless state: directory + recurse: true - name: Mounting Build Directory in Memory become: true @@ -270,11 +240,13 @@ warn: false - name: Creating Headless Chromium Configuration + become: true + become_user: root copy: 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 @@ -301,18 +273,24 @@ dest: /srv/source/chromium/src/out/Headless/args.gn - name: Generating Headless Chromium Configuration + become: true + become_user: root shell: | gn gen out/Headless args: chdir: /srv/source/chromium/src - name: Compiling Headless Chromium + become: true + become_user: root shell: | autoninja -C out/Headless headless_shell args: chdir: /srv/source/chromium/src - name: Getting Chromium Version + become: true + become_user: root shell: | sed --regexp-extended 's~[^0-9]+~~g' chrome/VERSION | tr '\n' '.' | sed 's~[.]$~~' args: @@ -321,12 +299,16 @@ register: version - name: Striping Symbols from Chromium Binary + become: true + become_user: root shell: | strip -o /srv/build/chromium/chromium-{{ version.stdout | quote }} out/Headless/headless_shell args: chdir: /srv/source/chromium/src - name: Compressing Chromium + become: true + become_user: root shell: | brotli --best --force {{ item }} args: @@ -335,6 +317,8 @@ - "chromium-{{ version.stdout }}" - name: Downloading Chromium + become: true + become_user: root fetch: src: "/srv/build/chromium/{{ item }}" dest: ../../../bin/ @@ -344,6 +328,8 @@ - "chromium-{{ version.stdout }}.br" - name: Archiving SwiftShader + become: true + become_user: root shell: | tar --directory /srv/source/chromium/src/out/Headless/swiftshader --create --file swiftshader.tar libEGL.so libGLESv2.so args: @@ -352,6 +338,8 @@ warn: false - name: Compressing SwiftShader + become: true + become_user: root shell: | brotli --best --force swiftshader.tar args: @@ -359,6 +347,8 @@ creates: /srv/build/chromium/swiftshader.tar.br - name: Downloading SwiftShader + become: true + become_user: root fetch: src: /srv/build/chromium/swiftshader.tar.br dest: ../../../bin/ diff --git a/bin/chromium.br b/bin/chromium.br old mode 100755 new mode 100644 index 1d60195..6000a5c Binary files a/bin/chromium.br and b/bin/chromium.br differ diff --git a/bin/swiftshader.tar.br b/bin/swiftshader.tar.br index 35e304c..3a7696d 100755 Binary files a/bin/swiftshader.tar.br and b/bin/swiftshader.tar.br differ diff --git a/package.json b/package.json index d220714..c4931aa 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "typings" ], "engines": { - "node": ">= 10.16" + "node": ">= 12" }, "scripts": { "build": "rimraf build && tsc -p tsconfig.json", @@ -27,14 +27,11 @@ "lambdafs": "^2.0.3" }, "devDependencies": { - "@types/node": "^10.17.55", - "puppeteer-core": "^10.1.0", + "@types/node": "^12.20.37", + "puppeteer-core": "^12.0.1", "rimraf": "^3.0.2", "typescript": "4.3.2" }, - "peerDependencies": { - "puppeteer-core": "^10.1.0" - }, "bugs": { "url": "https://github.com/alixaxel/chrome-aws-lambda/issues" }, diff --git a/source/index.ts b/source/index.ts index cbfce35..80873bb 100644 --- a/source/index.ts +++ b/source/index.ts @@ -102,9 +102,9 @@ class Chromium { '--disable-setuid-sandbox', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSetuidSandbox&ss=chromium '--disable-site-isolation-trials', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSiteIsolation&ss=chromium '--disable-speech-api', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableSpeechAPI&ss=chromium - '--disable-web-security', // https://source.chromium.org/search?q=lang:cpp+symbol:kDisableWebSecurity&ss=chromium '--disk-cache-size=33554432', // https://source.chromium.org/search?q=lang:cpp+symbol:kDiskCacheSize&ss=chromium '--enable-features=SharedArrayBuffer', // https://source.chromium.org/search?q=file:content_features.cc&ss=chromium + '--font-render-hinting=none', // https://source.chromium.org/search?q=lang:cpp+symbol:kFontRenderHinting&sq=&ss=chromium '--hide-scrollbars', // https://source.chromium.org/search?q=lang:cpp+symbol:kHideScrollbars&ss=chromium '--ignore-gpu-blocklist', // https://source.chromium.org/search?q=lang:cpp+symbol:kIgnoreGpuBlocklist&ss=chromium '--in-process-gpu', // https://source.chromium.org/search?q=lang:cpp+symbol:kInProcessGPU&ss=chromium @@ -201,7 +201,7 @@ class Chromium { try { return require('puppeteer'); - } catch (error) { + } catch (error: any) { if (error.code !== 'MODULE_NOT_FOUND') { throw error; }