diff --git a/.circleci/config.yml b/.circleci/config.yml
deleted file mode 100644
index 7f84224d..00000000
--- a/.circleci/config.yml
+++ /dev/null
@@ -1,137 +0,0 @@
-version: 2.1
-orbs:
-  browser-tools: circleci/browser-tools@1
-  node: circleci/node@5
-aliases:
-  - &defaults
-      docker:
-        - image: cimg/node:16.20-browsers
-          auth:
-            username: $DOCKERHUB_USERNAME
-            password: $DOCKERHUB_PASSWORD
-commands:
-  install_python2:
-    steps:
-      - run:
-          name: Install Python 2
-          command: |
-            sudo apt-get update
-            sudo apt-get install python2-minimal
-            sudo update-alternatives --install /usr/bin/python python /usr/bin/python2 10
-  test:
-    steps:
-      - run:
-          name: Test
-          # The "cimg/node:*-browsers" images run Xvfb on :99 at startup, but that doesn't seem to be documented.
-          # If this starts failing, that might no longer be true.
-          # In that case, try: xvfb-run -e /dev/stdout npm test
-          command: DISPLAY=:99 npm test
-  deploy_gh_pages:
-    steps:
-      - when:
-          condition:
-            or:
-              - equal: [ master, <<pipeline.git.branch>> ]
-              - equal: [ develop, <<pipeline.git.branch>> ]
-          steps:
-            - run:
-                name: Deploy to GH Pages
-                command: |
-                  git config --global user.email $(git log --pretty=format:"%ae" -n1)
-                  git config --global user.name $(git log --pretty=format:"%an" -n1)
-                  npm run deploy -- \
-                    -r https://${GH_TOKEN}@github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git
-  deploy_npm:
-    steps:
-      - when:
-          condition:
-            or:
-              - equal: [ master, <<pipeline.git.branch>> ]
-              - equal: [ develop, <<pipeline.git.branch>> ]
-              - equal: [ beta, <<pipeline.git.branch>> ]
-              - matches: { pattern: "^hotfix.*", value: <<pipeline.git.branch>> }
-              - matches: { pattern: "^release.*", value: <<pipeline.git.branch>> }
-          steps:
-            - run:
-                # This relies on deploy_gh_pages to set git user info first
-                name: Deploy to NPM
-                command: |
-                  export RELEASE_VERSION="0.2.0-prerelease.$(date +'%Y%m%d%H%M%S')"
-                  if [[ "$CIRCLE_BRANCH" == hotfix/* ]]; then
-                    export NPM_TAG=hotfix
-                  elif [[ "$CIRCLE_BRANCH" == beta ]]; then
-                    export NPM_TAG=beta
-                  else
-                    export NPM_TAG=latest
-                  fi
-                  echo "Deploying version $RELEASE_VERSION to $NPM_TAG"
-                  npm --no-git-tag-version version $RELEASE_VERSION
-                  npm set //registry.npmjs.org/:_authToken=$NPM_TOKEN
-                  npm publish --tag $NPM_TAG
-                  if npm info | grep -q $RELEASE_VERSION; then
-                    git tag $RELEASE_VERSION
-                    git push \
-                      https://${GH_TOKEN}@github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git \
-                      $RELEASE_VERSION
-                  fi
-
-jobs:
-  default:
-    <<: *defaults
-    environment:
-      # DETECT_CHROMEDRIVER_VERSION only works if Chrome is installed before installing NPM packages
-      DETECT_CHROMEDRIVER_VERSION: "true"
-    steps:
-      - checkout
-      - install_python2
-      - browser-tools/install-chrome
-      - node/install-packages
-      - test
-      - deploy_gh_pages
-      - deploy_npm
-  sync_translations:
-    <<: *defaults
-    steps:
-      - run:
-          name: Sync Translations
-          command: |
-            echo "Starting translation sync"
-            set -ev
-            git checkout develop
-            # update translations, and test any updated messages
-            npm run translate
-            npm run translate:update
-            npm run test:messages
-            # stage any changes in the msg directory
-            git add ./msg
-            if git diff --cached --exit-code --quiet; then
-              echo "Nothing to commit."
-            else
-              git commit -m 'Update translations from Transifex [skip ci]'
-              # add remote, make sure that API token doesn't end up in the log
-              git remote add origin-translation \
-                https://${GH_TOKEN}@github.com/${CIRCLE_PROJECT_USERNAME}/${CIRCLE_PROJECT_REPONAME}.git \
-                > /dev/null 2>&1
-              git push --set-upstream origin-translation develop
-            fi
-workflows:
-  version: 2
-  default:
-    jobs:
-      - default:
-          context:
-            - dockerhub-credentials
-            - scratch-npm-creds
-  sync_translations:
-    triggers:
-      - schedule:
-          cron: 0 0 * * 1 # weekly on Monday
-          filters:
-            branches:
-              only:
-                - develop
-    jobs:
-      - sync_translations:
-          context:
-            - dockerhub-credentials
-            - scratch-npm-creds
diff --git a/.eslintignore b/.eslintignore
index d13589d3..d357d651 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -14,3 +14,5 @@
 /gh-pages/*
 /webpack.config.js
 /build/*
+
+/github-pages/*
diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml
index 96c42e7a..9a83c008 100644
--- a/.github/workflows/deploy.yml
+++ b/.github/workflows/deploy.yml
@@ -1,16 +1,46 @@
 name: build-scratch-blocks
 on: 
     push:
+permissions: write-all
+
 jobs:
     setup:
-      runs-on: ubuntu-20.04
+      runs-on: ubuntu-latest
+      env:
+        JVM_OPTS: -Xmx3200m
+        DETECT_CHROMEDRIVER_VERSION: "true"
+        PROJECT_PATH: ./scratch-blocks
       container:
         image: python:2.7.18-buster 
+        options: --user root
       steps:
         - uses: actions/checkout@v3
-        - name: Setup Node
-          uses: actions/setup-node@v2
+        - name: Install Chrome Dependencies
+          run: |
+            apt-get update
+            apt-get install -y libgconf-2-4 libatk1.0-0 libatk-bridge2.0-0 libgdk-pixbuf2.0-0 libgtk-3-0 libgbm-dev libnss3-dev libxss-dev libasound2
+        - name: Check Python version
+          run: python --version 
+        - name: Setup Java
+          uses: actions/setup-java@v3
           with:
-            node-version: 16 
+            distribution: 'temurin'
+            java-version: 17
+        - name: Setup Node
+          uses: actions/setup-node@v3
+          with:
+            node-version-file: '.nvmrc'
+        # - name: Setup Chrome
+        #   uses: browser-actions/setup-chrome@v1
+        #   with:
+        #     chrome-version: latest
         - name: Install Node Dependencies
-          run: node -v 
+          run: npm ci
+        - name: Lint
+          run: npm run test:lint
+        - name: Whats In Here
+          run: ls -la
+        - name: MSG
+          run: cd msg && ls -la
+        - name: Run Tests
+          run: npm test
diff --git a/package.json b/package.json
index c05aee46..17489470 100644
--- a/package.json
+++ b/package.json
@@ -17,7 +17,7 @@
     "test:unit": "node tests/jsunit/test_runner.js",
     "test:lint": "eslint .",
     "test:messages": "npm run translate && node i18n/test_scratch_msgs.js",
-    "test": "npm run test:lint && npm run test:messages && npm run test:unit",
+    "test": "npm run test:messages && npm run test:unit",
     "version": "json -f package.json -I -e \"this.repository.sha = '$(git log -n1 --pretty=format:%H)'\"",
     "translate": "node i18n/js_to_json.js && node i18n/json_to_js.js",
     "translate:sync:src": "tx-push-src scratch-editor blocks msg/json/en.json",
@@ -48,4 +48,4 @@
     "webpack": "4.47.0",
     "webpack-cli": "3.3.12"
   }
-}
\ No newline at end of file
+}
diff --git a/webpack.config.js b/webpack.config.js
index 6d3be1d1..73cf31a6 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -7,6 +7,8 @@ var CopyWebpackPlugin = require('copy-webpack-plugin');
 var path = require('path');
 var UglifyJsPlugin = require('uglifyjs-webpack-plugin');
 
+
+
 module.exports = [{
   mode: process.env.NODE_ENV === 'production' ? 'production' : 'development',
   entry: {
@@ -53,7 +55,7 @@ module.exports = [{
   entry: './shim/gh-pages.js',
   output: {
     filename: '[name].js',
-    path: path.resolve(__dirname, 'gh-pages')
+    path: path.resolve(__dirname, 'github-pages') //'/__w/scratch-blocks/scratch-blocks/github-pages'
   },
   optimization: {
     minimize: false