Standalone web client for Scratch
Go to file
Colby Gutierrez-Kraybill 2dd9d5a27e watchOptions required for use in docker environment
This will work in both docker and outside of docker, and tunes the load on a docker container running webpack to not overly burden a local host’s cpu watching for changes. By default, webpack-dev-middleware is supposed to be watching, but in practice this seems to not be the case in docker containers, as fsevents are not passed through the NFS mount into a container and it requires explicit polling to enable watching for changes.
2018-07-18 11:37:58 -04:00
.github Update PULL_REQUEST_TEMPLATE.md 2017-12-13 10:23:15 -08:00
.tx Add preview l10n to .tx/config 2018-06-22 09:59:10 -04:00
bin Correct preview route for fastly 2018-05-02 17:04:14 -04:00
dev-server watchOptions required for use in docker environment 2018-07-18 11:37:58 -04:00
src Remove extra characters from preview faq redirect routeAlias 2018-07-17 10:36:13 -04:00
static Merge pull request #1956 from technoboy10/feature/beta-banner 2018-07-17 09:46:14 -04:00
test Update Intergration README to have Saucelabs info 2018-07-06 10:33:40 -04:00
.babelrc Placeholders for everything ‘above the fold’ 2018-03-08 15:57:19 -05:00
.eslintignore Setup Cypress linting 2018-03-22 15:01:51 -04:00
.eslintrc.js Restore JSON linting 2018-01-30 11:53:24 -05:00
.gitignore Update gitignore to ignore node_modules in integration tests 2018-05-08 16:20:57 -04:00
.sass-lint.yml Upgrade and quiet sass-linter 2016-03-23 18:34:54 -04:00
.travis.yml Moving EB_AWS* key pairs into the travis settings for this repository 2018-06-27 10:00:39 -04:00
custom-locales.json Fixed Sardinian (#1236) 2017-03-07 09:41:11 -05:00
docker_entrypoint.sh Docker files 2018-03-23 15:50:01 -04:00
docker-compose.yml FALLBACK should reference localhost not docker specific scratchr2-app end point 2018-07-11 11:10:38 -04:00
Dockerfile node:8 is current 2018-03-27 14:11:24 -04:00
languages.json Gh 1834/add kazahk to language menu (#1859) 2018-04-24 10:33:52 -04:00
LICENSE Update license and add trademark notice 2016-01-31 13:07:21 -05:00
Makefile Merge pull request #1879 from BryceLTaylor/Verbose-Testing 2018-05-14 11:31:39 -04:00
package.json Adjust how smoke tests are called in package.json 2018-07-06 10:32:59 -04:00
README.md added sentence of detail on deployment 2018-06-18 15:29:10 -04:00
requirements.txt Use s3cmd to sync with S3 2016-04-29 15:52:15 -04:00
TRADEMARK Update TRADEMARK 2018-06-18 13:16:55 -04:00
webpack.config.js remove babel-loader options in webpack since it's not necessary 2018-06-20 16:25:42 -04:00

scratch-www

Standalone web client for Scratch

Build Status Coverage Status dependencies Status devDependencies Status

Where am I?

Physically? No idea.

Digitally? Youre at Scratchs open source web client!

Were working to update the Scratch website to use a new codebase, contained in this repository.

Were currently building Scratch using React and SCSS. Here are some resources to help you get acquainted with how were working on the Scratch codebase:

Before Getting Started

  • Make sure you have node (v4.2 or higher) and npm installed We use npm (Node Package Manager) to maintain and update packages required to build the site.

Update Packages

It's important to make sure that all of the dependencies are up to date because the scratch-www code only works with specific versions of the dependencies. You can update the packages by running this command:

npm install

To Build

To compile the source code into HTML and JavaScript bundles browsers can read, run this command:

npm run build

If you want to run a server that rebuilds the files as you edit them, skip to the To Run section below.

Warnings during npm install

These warnings can be safely ignored:

npm WARN react-modal@0.6.1 requires a peer of react@^0.14.0 but none was installed.
npm WARN react-redux@4.4.0 requires a peer of react@^0.14.0 but none was installed.
npm WARN react-redux@4.4.0 requires a peer of redux@^2.0.0 || ^3.0.0 but none was installed.
npm WARN react-addons-test-utils@0.14.7 requires a peer of react@^0.14.7 but none was installed.
npm WARN react-dom@0.14.8 requires a peer of react@^0.14.8 but none was installed.

These currently exist in static/js/lib

To Run

If you would like to create a temporary version of the site on your machine that you can access through your web browser run the command below. Building (see To Build above) is not necessary for this step and the temporary server can be turned off (see To Stop below).

The intl directory must be built separately with the make translations line below in order for the text to appear properly.

make translations
npm start

The site hosted on your local machine can now be accessed by a web browser by entering localhost:8333 into your web browser.

During development, npm start watches any update you make to files in either ./static or ./src and triggers a rebuild of the project. In development, the build is stored in memory, and not served from the ./build directory.

When running npm start, here are some important log messages to keep an eye out for:

  • webpack: bundle is now VALID. The bundle has been loaded into memory and is now viewable in the browser. This will show up both once npm start has completed its setup, and also once updates you make to files have been re-compiled for viewing in the browser.
  • webpack: bundle is now INVALID. If you see this, then it means you have made updates to files that are still being compiled for browser viewing. Pages will still be viewable, but they will not see any updates you made yet.

Once running, open http://localhost:8333 in your browser. If you wish to have the server reload automatically, you can install either nodemon or forever.

To stop

To stop the process that is making the site available to your web browser (created above in To Start) use ^C.

Configuration

npm start can be configured with the following environment variables

Variable Default Description
API_HOST https://api.scratch.mit.edu Hostname for API requests
SENTRY_DSN '' DSN for Sentry
FALLBACK '' Pass-through location for old site
GA_TRACKER '' Where to log Google Analytics data
NODE_ENV null If not production, app acts like development
PORT 8333 Port for devserver (http://localhost:XXXX)

NOTE: Because by default API_HOST=https://api.scratch.mit.edu, please be aware that, by default, you will be seeing and interacting with real data on the Scratch website.

To Test

npm test

To Deploy

Deploying to staging or production will upload code to S3 and configure Fastly.

npm install
virtualenv ENV
. ENV/bin/activate
pip install -r requirements.txt
make deploy
Variable Default Description
FASTLY_SERVICE_ID '' Fastly service ID for bin/configure-fastly.js
FASTLY_API_KEY '' Fastly API key for bin/configure-fastly.js
FASTLY_ACTIVATE_CHANGES false Activate changes and purge all after configuring
AWS_ACCESS_KEY_ID '' AWS access key id for S3
AWS_SECRET_ACCESS_KEY '' AWS secret access key for S3
S3_BUCKET_NAME '' S3 bucket name to deploy into

Current issues with the development

We're currently in the process of transitioning into this web client from Scratch's existing structure. As we transition, there are going to be some issues along the way that relate to how this client needs to interact with the existing infrastructure to work properly in production.

FALLBACK

On top of migrating to using this as our web client, Scratch is also transitioning into using a new API backend, Scratch REST API. As that is also currently in development and incomplete, we are set up to fall back to using existing Scratch endpoints if an API endpoint does not exist which is where the FALLBACK comes in.

Most of the issues we have currently revolve around the use of FALLBACK. This variable is used to specify what URL to fall back onto should a request fail within the context of this web client, or when using the API_HOST. If not specified in the process, it will not be used, and any request that is not made through the web client or the API will be unreachable.

Setting FALLBACK=https://scratch.mit.edu allows the web client to retrieve data from the Scratch website in your development environment. However, because of security concerns, trying to send data to Scratch through your development environment won't work. This means the following things will be broken for the time being:

  • Login on the splash page (In the process of being fixed)
  • Some update attempts to production data made through a development version of the web client

Additionally, if you set FALLBACK=https://scratch.mit.edu, be aware that clicking on links to parts of the website not yet migrated over (currently such as Explore, Discuss, Profile, etc.) will take you to the Scratch website itself.

Windows

Some users have experienced difficulties when trying to get our web client to work on Windows. One solution could be to use Cygwin. If that doesn't work, you might want to use Wubi (Windows XP, Vista, 7) or Wubiuefi (Windows 8 or higher). Wubi(uefi) is a Windows Installer for Ubuntu that allows you to have Ubuntu and Windows on one disk, without the need of an extra partition.

Docker

This section is only relevant to the Scratch Team since it requires access to private repositories, so is not usable by 3rd party contributors.

A set of Docker related files are provided to create isolated container environments suitable for end-to-end local development:

  • Dockerfile
  • docker-compose.yml
  • docker_entrypoint.sh
Docker Quick Start (CLI)

Make sure you already have the Scratch REST API running locally in its docker environment.

$ docker-compose up

After this has launched you will be able to access a running copy of scratch-www on port 8333 via http://localhost:8333

Docker Configuration

Dockerfile defines how a scratch-www docker image is created.

docker-compose.yml takes care of launching scratch-www into a development environment that is composed of other components, such as the Scratch REST API server and the legacy Scratch code. If you have not already setup the Scratch REST API in your local environment, you will need to modify docker-compose.yml by removing external: true from:

networks:
  scratchapi_scratch_network:
    external: true