Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Azure DevOps build pipeline #7096

Merged
merged 26 commits into from
May 29, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
058df41
Add azure-pipelines.yml to make DevOps happy
ianschmitz Apr 3, 2019
1a8d59f
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 5, 2019
c4d4606
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 6, 2019
58d5eac
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 6, 2019
65f9435
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 16, 2019
409b9b5
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 18, 2019
b9848f2
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 23, 2019
a55dc7a
Merge remote-tracking branch 'upstream/master'
ianschmitz Apr 26, 2019
d93d16d
Initial Azure Pipelines CI
willsmythe Apr 2, 2019
c878843
Remove unncessary Yarn cache
willsmythe Apr 2, 2019
195267b
clean up comment; fix typo
willsmythe Apr 2, 2019
89c796e
Rename azure pipelines YAML files
willsmythe Apr 3, 2019
9d54940
Add VERDACCIO_PACKAGE override variable to avoid hard-coded URL in ta…
willsmythe Apr 9, 2019
53a0f2f
Fix EOL in verdaccio.yaml
willsmythe Apr 10, 2019
ea6d262
Fix random 'unexpected end of file' problem; reduce calls to registry…
willsmythe Apr 11, 2019
a20ab53
Only run Behavior tests on mac; only run Old Node tests on Linux
willsmythe Apr 11, 2019
7481a92
update configurations
willsmythe Apr 12, 2019
67673a7
Play with Lerna 3.0 publish args; enable verbose logging
willsmythe Apr 24, 2019
a3b6629
Remove --loglevel from lerna publish; used for debugging
willsmythe Apr 29, 2019
582ccf1
Merge pull request #2 from willsmythe/master
ianschmitz May 1, 2019
cb2dd99
Update e2e publish scripts
ianschmitz Apr 26, 2019
f2e485d
Cleanup DevOps (#3)
ianschmitz May 2, 2019
d7c761a
Simplify mjs test suite
ianschmitz May 26, 2019
9191433
Remove unneeded deps from mjs suite
ianschmitz May 26, 2019
3b1b29b
PR feedback
ianschmitz May 26, 2019
0f3ade2
Swap Travis for Azure DevOps badge
ianschmitz May 29, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Create React App [![Build Status](https://travis-ci.org/facebook/create-react-app.svg?branch=master)](https://travis-ci.org/facebook/create-react-app) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/facebook/create-react-app/pulls)
# Create React App [![Build Status](https://dev.azure.com/facebook/create-react-app/_apis/build/status/facebook.create-react-app?branchName=master)](https://dev.azure.com/facebook/create-react-app/_build/latest?definitionId=1&branchName=master) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-green.svg)](https://github.com/facebook/create-react-app/pulls)

Create React apps with no build configuration.

Expand Down
40 changes: 40 additions & 0 deletions azure-pipelines-test-job.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#
# Azure Pipelines job for building and testing create-react-app on Linux, Windows, and macOS.
#

parameters:
name: ''
testScript: ''
configurations:
LinuxNode8: { vmImage: 'ubuntu-16.04', nodeVersion: 8.x }
LinuxNode10: { vmImage: 'ubuntu-16.04', nodeVersion: 10.x }
WindowsNode8: { vmImage: 'vs2017-win2016', nodeVersion: 8.x }
WindowsNode10: { vmImage: 'vs2017-win2016', nodeVersion: 10.x }

jobs:
- job: ${{ parameters.name }}
strategy:
matrix:
${{ insert }}: ${{ parameters.configurations }}
pool:
vmImage: $(vmImage)
steps:
- script: |
git config --global core.autocrlf false
git config --global user.name "Create React App"
git config --global user.email "cra@email.com"
displayName: 'Initialize Git config'

- checkout: self
path: create-react-app

- task: NodeTool@0
inputs:
versionSpec: $(nodeVersion)
displayName: 'Install Node.js'

- script: yarn --frozen-lockfile
displayName: 'Run yarn'

- bash: ${{ parameters.testScript }}
displayName: 'Run tests'
78 changes: 78 additions & 0 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
#
# Azure Pipelines configuration for building and testing create-react-app on Linux, Windows, and macOS.
#

trigger:
- master

variables:
CI: true
# Overrides the Yarn and NPM cache directories so they are on the same drive as the source. This helps improve build performance on Windows hosted agents.
YARN_CACHE_FOLDER: $(Build.SourcesDirectory)/../yarn-cache
NPM_CONFIG_CACHE: $(Build.SourcesDirectory)/../npm-cache
# Sets TEMP to be on the same drive as the cloned source on Windows. This avoids test scripts that "cd" into a directory under TEMP from failing because this directory is on a different drive from the current directory.
VSTS_OVERWRITE_TEMP: True
# Override Verdaccio package to use. This is temoporary and is needed to avoid socket timeouts on hosted Windows agent (on Azure). This also changes Verdaccio to return a 503 (service unavailable) instead of a 404 (not found) when the connection to the uplink timesout.
VERDACCIO_PACKAGE: https://github.com/willsmythe/verdaccio/releases/download/create-react-app/verdaccio-4.0.0-alpha.8.tgz

# ******************************************************************************
# Simple test suite
# ******************************************************************************
jobs:
- template: azure-pipelines-test-job.yml
parameters:
name: Simple
testScript: tasks/e2e-simple.sh

# ******************************************************************************
# Installs test suite
# ******************************************************************************
- template: azure-pipelines-test-job.yml
parameters:
name: Installs
testScript: tasks/e2e-installs.sh

# ******************************************************************************
# Kitchensink test suite
# ******************************************************************************
- template: azure-pipelines-test-job.yml
parameters:
name: Kitchensink
testScript: tasks/e2e-kitchensink.sh

# ******************************************************************************
# Kitchensink Eject test suite
# ******************************************************************************
- template: azure-pipelines-test-job.yml
parameters:
name: KitchensinkEject
testScript: tasks/e2e-kitchensink-eject.sh

# ******************************************************************************
# Behavior test suite
# ******************************************************************************
- template: azure-pipelines-test-job.yml
parameters:
name: Behavior
testScript: tasks/e2e-behavior.sh
configurations:
LinuxNode8: { vmImage: 'ubuntu-16.04', nodeVersion: 8.x }
LinuxNode10: { vmImage: 'ubuntu-16.04', nodeVersion: 10.x }
WindowsNode8: { vmImage: 'vs2017-win2016', nodeVersion: 8.x }
WindowsNode10: { vmImage: 'vs2017-win2016', nodeVersion: 10.x }
MacNode8: { vmImage: 'macOS-10.13', nodeVersion: 8.x }
MacNode10: { vmImage: 'macOS-10.13', nodeVersion: 10.x }

# ******************************************************************************
# Old Node test suite
# ******************************************************************************
- job: OldNode
pool:
vmImage: ubuntu-16.04
steps:
- task: NodeTool@0
inputs:
versionSpec: 6.x
displayName: 'Install Node.js 6.x'
- bash: tasks/e2e-old-node.sh
displayName: 'Run tests'
31 changes: 9 additions & 22 deletions tasks/e2e-behavior.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,18 +15,16 @@ cd "$(dirname "$0")"
# CLI, app, and test module temporary locations
# http://unix.stackexchange.com/a/84980
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
temp_module_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_module_path'`
custom_registry_url=http://localhost:4873
original_npm_registry_url=`npm get registry`
original_yarn_registry_url=`yarn config get registry`

# Load functions for working with local NPM registry (Verdaccio)
source local-registry.sh

function cleanup {
echo 'Cleaning up.'
ps -ef | grep 'verdaccio' | grep -v grep | awk '{print $2}' | xargs kill -9
echo 'Cleaning up.'
ps -ef | grep 'react-scripts' | grep -v grep | awk '{print $2}' | xargs kill -9
cd "$root_path"
npm set registry "$original_npm_registry_url"
yarn config set registry "$original_yarn_registry_url"
# Restore the original NPM and Yarn registry URLs and stop Verdaccio
stopLocalRegistry
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -75,22 +73,11 @@ yarn
# First, publish the monorepo.
# ******************************************************************************

# Start local registry
tmp_registry_log=`mktemp`
(cd && nohup npx verdaccio@3.8.2 -c "$root_path"/tasks/verdaccio.yaml &>$tmp_registry_log &)
# Wait for `verdaccio` to boot
grep -q 'http address' <(tail -f $tmp_registry_log)

# Set registry to local registry
npm set registry "$custom_registry_url"
yarn config set registry "$custom_registry_url"

# Login so we can publish packages
(cd && npx npm-auth-to-token@1.0.0 -u user -p password -e user@example.com -r "$custom_registry_url")
# Start the local NPM registry
startLocalRegistry "$root_path"/tasks/verdaccio.yaml

# Publish the monorepo
git clean -df
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
publishToLocalRegistry

# ******************************************************************************
# Now that we have published them, run all tests as if they were released.
Expand Down
28 changes: 8 additions & 20 deletions tasks/e2e-installs.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,16 @@ cd "$(dirname "$0")"
# CLI and app temporary locations
# http://unix.stackexchange.com/a/84980
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
custom_registry_url=http://localhost:4873
original_npm_registry_url=`npm get registry`
original_yarn_registry_url=`yarn config get registry`

# Load functions for working with local NPM registry (Verdaccio)
source local-registry.sh

function cleanup {
echo 'Cleaning up.'
ps -ef | grep 'verdaccio' | grep -v grep | awk '{print $2}' | xargs kill -9
cd "$root_path"
rm -rf "$temp_app_path"
npm set registry "$original_npm_registry_url"
yarn config set registry "$original_yarn_registry_url"
# Restore the original NPM and Yarn registry URLs and stop Verdaccio
stopLocalRegistry
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -96,22 +95,11 @@ yarn
# First, publish the monorepo.
# ******************************************************************************

# Start local registry
tmp_registry_log=`mktemp`
(cd && nohup npx verdaccio@3.8.2 -c "$root_path"/tasks/verdaccio.yaml &>$tmp_registry_log &)
# Wait for `verdaccio` to boot
grep -q 'http address' <(tail -f $tmp_registry_log)

# Set registry to local registry
npm set registry "$custom_registry_url"
yarn config set registry "$custom_registry_url"

# Login so we can publish packages
(cd && npx npm-auth-to-token@1.0.0 -u user -p password -e user@example.com -r "$custom_registry_url")
# Start the local NPM registry
startLocalRegistry "$root_path"/tasks/verdaccio.yaml

# Publish the monorepo
git clean -df
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
publishToLocalRegistry

echo "Create React App Version: "
npx create-react-app --version
Expand Down
28 changes: 8 additions & 20 deletions tasks/e2e-kitchensink-eject.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,19 @@ cd "$(dirname "$0")"
# http://unix.stackexchange.com/a/84980
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
temp_module_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_module_path'`
custom_registry_url=http://localhost:4873
original_npm_registry_url=`npm get registry`
original_yarn_registry_url=`yarn config get registry`

# Load functions for working with local NPM registry (Verdaccio)
source local-registry.sh

function cleanup {
echo 'Cleaning up.'
unset BROWSERSLIST
ps -ef | grep 'verdaccio' | grep -v grep | awk '{print $2}' | xargs kill -9
ps -ef | grep 'react-scripts' | grep -v grep | awk '{print $2}' | xargs kill -9
cd "$root_path"
# TODO: fix "Device or resource busy" and remove ``|| $CI`
rm -rf "$temp_app_path" "$temp_module_path" || $CI
npm set registry "$original_npm_registry_url"
yarn config set registry "$original_yarn_registry_url"
# Restore the original NPM and Yarn registry URLs and stop Verdaccio
stopLocalRegistry
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -78,22 +77,11 @@ yarn
# First, publish the monorepo.
# ******************************************************************************

# Start local registry
tmp_registry_log=`mktemp`
(cd && nohup npx verdaccio@3.8.2 -c "$root_path"/tasks/verdaccio.yaml &>$tmp_registry_log &)
# Wait for `verdaccio` to boot
grep -q 'http address' <(tail -f $tmp_registry_log)

# Set registry to local registry
npm set registry "$custom_registry_url"
yarn config set registry "$custom_registry_url"

# Login so we can publish packages
(cd && npx npm-auth-to-token@1.0.0 -u user -p password -e user@example.com -r "$custom_registry_url")
# Start the local NPM registry
startLocalRegistry "$root_path"/tasks/verdaccio.yaml

# Publish the monorepo
git clean -df
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
publishToLocalRegistry

# ******************************************************************************
# Now that we have published them, create a clean app folder and install them.
Expand Down
28 changes: 8 additions & 20 deletions tasks/e2e-kitchensink.sh
Original file line number Diff line number Diff line change
Expand Up @@ -16,20 +16,19 @@ cd "$(dirname "$0")"
# http://unix.stackexchange.com/a/84980
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
temp_module_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_module_path'`
custom_registry_url=http://localhost:4873
original_npm_registry_url=`npm get registry`
original_yarn_registry_url=`yarn config get registry`

# Load functions for working with local NPM registry (Verdaccio)
source local-registry.sh

function cleanup {
echo 'Cleaning up.'
unset BROWSERSLIST
ps -ef | grep 'verdaccio' | grep -v grep | awk '{print $2}' | xargs kill -9
ps -ef | grep 'react-scripts' | grep -v grep | awk '{print $2}' | xargs kill -9
cd "$root_path"
# TODO: fix "Device or resource busy" and remove ``|| $CI`
rm -rf "$temp_app_path" "$temp_module_path" || $CI
npm set registry "$original_npm_registry_url"
yarn config set registry "$original_yarn_registry_url"
# Restore the original NPM and Yarn registry URLs and stop Verdaccio
stopLocalRegistry
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -78,22 +77,11 @@ yarn
# First, publish the monorepo.
# ******************************************************************************

# Start local registry
tmp_registry_log=`mktemp`
(cd && nohup npx verdaccio@3.8.2 -c "$root_path"/tasks/verdaccio.yaml &>$tmp_registry_log &)
# Wait for `verdaccio` to boot
grep -q 'http address' <(tail -f $tmp_registry_log)

# Set registry to local registry
npm set registry "$custom_registry_url"
yarn config set registry "$custom_registry_url"

# Login so we can publish packages
(cd && npx npm-auth-to-token@1.0.0 -u user -p password -e user@example.com -r "$custom_registry_url")
# Start the local NPM registry
startLocalRegistry "$root_path"/tasks/verdaccio.yaml

# Publish the monorepo
git clean -df
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
publishToLocalRegistry

# ******************************************************************************
# Now that we have published them, create a clean app folder and install them.
Expand Down
29 changes: 9 additions & 20 deletions tasks/e2e-simple.sh
Original file line number Diff line number Diff line change
Expand Up @@ -15,19 +15,18 @@ cd "$(dirname "$0")"
# App temporary location
# http://unix.stackexchange.com/a/84980
temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
custom_registry_url=http://localhost:4873
original_npm_registry_url=`npm get registry`
original_yarn_registry_url=`yarn config get registry`

# Load functions for working with local NPM registry (Verdaccio)
source local-registry.sh

function cleanup {
echo 'Cleaning up.'
ps -ef | grep 'verdaccio' | grep -v grep | awk '{print $2}' | xargs kill -9
cd "$root_path"
# Uncomment when snapshot testing is enabled by default:
# rm ./packages/react-scripts/template/src/__snapshots__/App.test.js.snap
rm -rf "$temp_app_path"
npm set registry "$original_npm_registry_url"
yarn config set registry "$original_yarn_registry_url"
# Restore the original NPM and Yarn registry URLs and stop Verdaccio
stopLocalRegistry
}

# Error messages are redirected to stderr
Expand Down Expand Up @@ -85,18 +84,8 @@ fi
# Bootstrap monorepo
yarn

# Start local registry
tmp_registry_log=`mktemp`
(cd && nohup npx verdaccio@3.8.2 -c "$root_path"/tasks/verdaccio.yaml &>$tmp_registry_log &)
# Wait for `verdaccio` to boot
grep -q 'http address' <(tail -f $tmp_registry_log)

# Set registry to local registry
npm set registry "$custom_registry_url"
yarn config set registry "$custom_registry_url"

# Login so we can publish packages
(cd && npx npm-auth-to-token@1.0.0 -u user -p password -e user@example.com -r "$custom_registry_url")
# Start the local NPM registry
startLocalRegistry "$root_path"/tasks/verdaccio.yaml

# Lint own code
./node_modules/.bin/eslint --max-warnings 0 packages/babel-preset-react-app/
Expand Down Expand Up @@ -149,8 +138,8 @@ CI=true yarn test
# Test local start command
yarn start --smoke-test

git clean -df
./tasks/publish.sh --yes --force-publish=* --skip-git --cd-version=prerelease --exact --npm-tag=latest
# Publish the monorepo
publishToLocalRegistry

# ******************************************************************************
# Install react-scripts prerelease via create-react-app prerelease.
Expand Down
Loading