generated from staticwebdev/vanilla-basic
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit fc2c9fb
Showing
14 changed files
with
640 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
# Find the Dockerfile at this URL | ||
# https://github.com/Azure/azure-functions-docker/blob/dev/host/4/bullseye/amd64/python/python39/python39-core-tools.Dockerfile | ||
FROM mcr.microsoft.com/azure-functions/python:4-python3.9-core-tools | ||
|
||
# Copy library scripts to execute | ||
COPY library-scripts/*.sh library-scripts/*.env /tmp/library-scripts/ | ||
|
||
# Install Node.js, Azure Static Web Apps CLI and Azure Functions Core Tools | ||
ARG NODE_VERSION="16" | ||
ARG CORE_TOOLS_VERSION="4" | ||
ENV NVM_DIR="/usr/local/share/nvm" \ | ||
NVM_SYMLINK_CURRENT=true \ | ||
PATH="${NVM_DIR}/current/bin:${PATH}" | ||
RUN bash /tmp/library-scripts/node-debian.sh "${NVM_DIR}" "${NODE_VERSION}" "${USERNAME}" \ | ||
&& su vscode -c "umask 0002 && . /usr/local/share/nvm/nvm.sh && nvm install ${NODE_VERSION} 2>&1" \ | ||
&& su vscode -c "umask 0002 && npm install --cache /tmp/empty-cache -g @azure/static-web-apps-cli" \ | ||
&& if [ $CORE_TOOLS_VERSION != "4" ]; then apt-get remove -y azure-functions-core-tools-4 && apt-get update && apt-get install -y "azure-functions-core-tools-${CORE_TOOLS_VERSION}"; fi \ | ||
&& apt-get clean -y && rm -rf /var/lib/apt/lists/* | ||
|
||
# [Optional] Uncomment this section to install additional OS packages. | ||
# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ | ||
# && apt-get -y install --no-install-recommends <your-package-list-here> | ||
|
||
# [Optional] Uncomment this line to install global node packages. | ||
# RUN su vscode -c "source /usr/local/share/nvm/nvm.sh && npm install -g <your-package-here>" 2>&1 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: | ||
// https://github.com/microsoft/vscode-dev-containers/tree/v0.236.0/containers/azure-static-web-apps | ||
{ | ||
"name": "Azure Static Web Apps - vanilla sample", | ||
"build": { | ||
"dockerfile": "Dockerfile", | ||
"args": { | ||
// Please look at runtime version support to make sure you're using compatible versions | ||
// https://docs.microsoft.com/en-us/azure/azure-functions/supported-languages#languages-by-runtime-version | ||
"NODE_VERSION": "16", | ||
"CORE_TOOLS_VERSION": "4" | ||
} | ||
}, | ||
"forwardPorts": [ 7071, 4280 ], | ||
|
||
// Configure tool-specific properties. | ||
"customizations": { | ||
// Configure properties specific to VS Code. | ||
"vscode": { | ||
// Add the IDs of extensions you want installed when the container is created. | ||
"extensions": [ | ||
"ms-azuretools.vscode-azurefunctions", | ||
"ms-azuretools.vscode-azurestaticwebapps", | ||
"ms-dotnettools.csharp", | ||
"ms-python.python", | ||
"dbaeumer.vscode-eslint" | ||
] | ||
} | ||
}, | ||
|
||
// Use 'postCreateCommand' to run commands after the container is created. | ||
// "postCreateCommand": "node --version", | ||
|
||
// Comment out to connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. | ||
"remoteUser": "vscode" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,170 @@ | ||
#!/bin/bash | ||
#------------------------------------------------------------------------------------------------------------- | ||
# Copyright (c) Microsoft Corporation. All rights reserved. | ||
# Licensed under the MIT License. See https://go.microsoft.com/fwlink/?linkid=2090316 for license information. | ||
#------------------------------------------------------------------------------------------------------------- | ||
# | ||
# Docs: https://github.com/microsoft/vscode-dev-containers/blob/main/script-library/docs/node.md | ||
# Maintainer: The VS Code and Codespaces Teams | ||
# | ||
# Syntax: ./node-debian.sh [directory to install nvm] [node version to install (use "none" to skip)] [non-root user] [Update rc files flag] [install node-gyp deps] | ||
|
||
export NVM_DIR=${1:-"/usr/local/share/nvm"} | ||
export NODE_VERSION=${2:-"lts"} | ||
USERNAME=${3:-"automatic"} | ||
UPDATE_RC=${4:-"true"} | ||
INSTALL_TOOLS_FOR_NODE_GYP="${5:-true}" | ||
export NVM_VERSION="0.38.0" | ||
|
||
set -e | ||
|
||
if [ "$(id -u)" -ne 0 ]; then | ||
echo -e 'Script must be run as root. Use sudo, su, or add "USER root" to your Dockerfile before running this script.' | ||
exit 1 | ||
fi | ||
|
||
# Ensure that login shells get the correct path if the user updated the PATH using ENV. | ||
rm -f /etc/profile.d/00-restore-env.sh | ||
echo "export PATH=${PATH//$(sh -lc 'echo $PATH')/\$PATH}" > /etc/profile.d/00-restore-env.sh | ||
chmod +x /etc/profile.d/00-restore-env.sh | ||
|
||
# Determine the appropriate non-root user | ||
if [ "${USERNAME}" = "auto" ] || [ "${USERNAME}" = "automatic" ]; then | ||
USERNAME="" | ||
POSSIBLE_USERS=("vscode" "node" "codespace" "$(awk -v val=1000 -F ":" '$3==val{print $1}' /etc/passwd)") | ||
for CURRENT_USER in ${POSSIBLE_USERS[@]}; do | ||
if id -u ${CURRENT_USER} > /dev/null 2>&1; then | ||
USERNAME=${CURRENT_USER} | ||
break | ||
fi | ||
done | ||
if [ "${USERNAME}" = "" ]; then | ||
USERNAME=root | ||
fi | ||
elif [ "${USERNAME}" = "none" ] || ! id -u ${USERNAME} > /dev/null 2>&1; then | ||
USERNAME=root | ||
fi | ||
|
||
updaterc() { | ||
if [ "${UPDATE_RC}" = "true" ]; then | ||
echo "Updating /etc/bash.bashrc and /etc/zsh/zshrc..." | ||
if [[ "$(cat /etc/bash.bashrc)" != *"$1"* ]]; then | ||
echo -e "$1" >> /etc/bash.bashrc | ||
fi | ||
if [ -f "/etc/zsh/zshrc" ] && [[ "$(cat /etc/zsh/zshrc)" != *"$1"* ]]; then | ||
echo -e "$1" >> /etc/zsh/zshrc | ||
fi | ||
fi | ||
} | ||
|
||
# Function to run apt-get if needed | ||
apt_get_update_if_needed() | ||
{ | ||
if [ ! -d "/var/lib/apt/lists" ] || [ "$(ls /var/lib/apt/lists/ | wc -l)" = "0" ]; then | ||
echo "Running apt-get update..." | ||
apt-get update | ||
else | ||
echo "Skipping apt-get update." | ||
fi | ||
} | ||
|
||
# Checks if packages are installed and installs them if not | ||
check_packages() { | ||
if ! dpkg -s "$@" > /dev/null 2>&1; then | ||
apt_get_update_if_needed | ||
apt-get -y install --no-install-recommends "$@" | ||
fi | ||
} | ||
|
||
# Ensure apt is in non-interactive to avoid prompts | ||
export DEBIAN_FRONTEND=noninteractive | ||
|
||
# Install dependencies | ||
check_packages apt-transport-https curl ca-certificates tar gnupg2 dirmngr | ||
|
||
# Install yarn | ||
if type yarn > /dev/null 2>&1; then | ||
echo "Yarn already installed." | ||
else | ||
# Import key safely (new method rather than deprecated apt-key approach) and install | ||
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor > /usr/share/keyrings/yarn-archive-keyring.gpg | ||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/yarn-archive-keyring.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list | ||
apt-get update | ||
apt-get -y install --no-install-recommends yarn | ||
fi | ||
|
||
# Adjust node version if required | ||
if [ "${NODE_VERSION}" = "none" ]; then | ||
export NODE_VERSION= | ||
elif [ "${NODE_VERSION}" = "lts" ]; then | ||
export NODE_VERSION="lts/*" | ||
fi | ||
|
||
# Create a symlink to the installed version for use in Dockerfile PATH statements | ||
export NVM_SYMLINK_CURRENT=true | ||
|
||
# Install the specified node version if NVM directory already exists, then exit | ||
if [ -d "${NVM_DIR}" ]; then | ||
echo "NVM already installed." | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
su ${USERNAME} -c ". $NVM_DIR/nvm.sh && nvm install ${NODE_VERSION} && nvm clear-cache" | ||
fi | ||
exit 0 | ||
fi | ||
|
||
# Create nvm group, nvm dir, and set sticky bit | ||
if ! cat /etc/group | grep -e "^nvm:" > /dev/null 2>&1; then | ||
groupadd -r nvm | ||
fi | ||
umask 0002 | ||
usermod -a -G nvm ${USERNAME} | ||
mkdir -p ${NVM_DIR} | ||
chown :nvm ${NVM_DIR} | ||
chmod g+s ${NVM_DIR} | ||
su ${USERNAME} -c "$(cat << EOF | ||
set -e | ||
umask 0002 | ||
# Do not update profile - we'll do this manually | ||
export PROFILE=/dev/null | ||
ls -lah /home/${USERNAME}/.nvs || : | ||
curl -so- https://raw.githubusercontent.com/nvm-sh/nvm/v${NVM_VERSION}/install.sh | bash | ||
source ${NVM_DIR}/nvm.sh | ||
if [ "${NODE_VERSION}" != "" ]; then | ||
nvm alias default ${NODE_VERSION} | ||
fi | ||
nvm clear-cache | ||
EOF | ||
)" 2>&1 | ||
# Update rc files | ||
if [ "${UPDATE_RC}" = "true" ]; then | ||
updaterc "$(cat <<EOF | ||
export NVM_DIR="${NVM_DIR}" | ||
[ -s "\$NVM_DIR/nvm.sh" ] && . "\$NVM_DIR/nvm.sh" | ||
[ -s "\$NVM_DIR/bash_completion" ] && . "\$NVM_DIR/bash_completion" | ||
EOF | ||
)" | ||
fi | ||
|
||
# If enabled, verify "python3", "make", "gcc", "g++" commands are available so node-gyp works - https://github.com/nodejs/node-gyp | ||
if [ "${INSTALL_TOOLS_FOR_NODE_GYP}" = "true" ]; then | ||
echo "Verifying node-gyp OS requirements..." | ||
to_install="" | ||
if ! type make > /dev/null 2>&1; then | ||
to_install="${to_install} make" | ||
fi | ||
if ! type gcc > /dev/null 2>&1; then | ||
to_install="${to_install} gcc" | ||
fi | ||
if ! type g++ > /dev/null 2>&1; then | ||
to_install="${to_install} g++" | ||
fi | ||
if ! type python3 > /dev/null 2>&1; then | ||
to_install="${to_install} python3-minimal" | ||
fi | ||
if [ ! -z "${to_install}" ]; then | ||
apt_get_update_if_needed | ||
apt-get -y install ${to_install} | ||
fi | ||
fi | ||
|
||
echo "Done!" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,102 @@ | ||
|
||
# This is a basic workflow to help you get started with Actions | ||
|
||
name: Playwright tests | ||
|
||
# Controls when the workflow will run | ||
on: | ||
# Triggers the workflow on push or pull request events but only for the "main" branch | ||
push: | ||
branches: [ "main" ] | ||
pull_request: | ||
branches: [ "main" ] | ||
schedule: | ||
# nightly | ||
- cron: '0 0 * * *' | ||
|
||
# Allows you to run this workflow manually from the Actions tab | ||
workflow_dispatch: | ||
|
||
# Make env var reflect presence of token | ||
env: | ||
PAT_EXISTS: ${{ secrets.PAT_TOKEN }} | ||
|
||
# A workflow run is made up of one or more jobs that can run sequentially or in parallel | ||
jobs: | ||
test: | ||
# Runs on an ubuntu runner | ||
runs-on: ubuntu-latest | ||
|
||
strategy: | ||
matrix: | ||
node-version: [14.x, 16.x, 18.x] | ||
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/ | ||
|
||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-node@v3 | ||
- name: Install dependencies | ||
run: npm ci | ||
- name: Install Playwright | ||
run: npx playwright install --with-deps | ||
- name: Install Sirv | ||
run: npm install --g sirv-cli | ||
- name: Run playwright tests | ||
run: npm run playwright_test | ||
- name: Get current date | ||
id: date | ||
run: echo "::set-output name=date::$(date +'%Y-%m-%d')" | ||
- name: Upload HTML report as Artifact | ||
uses: actions/upload-artifact@v2 | ||
env: | ||
TAG_NAME: test-report-${{ steps.date.outputs.date }} | ||
if: ${{ always() }} | ||
|
||
with: | ||
name: onDemand | ||
path: pw-report/ | ||
|
||
storeReports: | ||
name: Store reports | ||
if: ${{ always() }} | ||
needs: test | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Download all workflow run artifacts | ||
uses: actions/download-artifact@v3 | ||
id: download | ||
- name: Publish to external repo | ||
# Only upload if we're running from the staticwebdev repo | ||
if: "${{ env.PAT_EXISTS != '' }}" | ||
uses: peaceiris/actions-gh-pages@v3.7.3 | ||
with: | ||
external_repository: mspnp/intern-js-pipeline | ||
publish_branch: gh-pages | ||
personal_token: ${{ secrets.PAT_TOKEN }} | ||
publish_dir: ${{steps.download.outputs.download-path}} | ||
destination_dir: test-reports/${{ github.repository }} | ||
keep_files: true | ||
user_name: "github-actions[bot]" | ||
user_email: "github-actions[bot]@users.noreply.github.com" | ||
|
||
notify-dashboard: | ||
name: Notify Dashboard | ||
# Only upload if we're running from the staticwebdev repo | ||
if: ${{ secrets.PAT_TOKEN != 0 }} | ||
needs: [test, storeReports] | ||
# The type of runner that the job will run on | ||
runs-on: ubuntu-latest | ||
|
||
# Steps represent a sequence of tasks that will be executed as part of the job | ||
steps: | ||
# Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it | ||
- uses: actions/checkout@v3 | ||
|
||
# Runs a single command using the runners shell | ||
- name: Notify docusaurus repo | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }} | ||
if: "${{ env.PAT_EXISTS != '' }}" | ||
run: | | ||
gh api repos/mspnp/intern-js-pipeline/dispatches \ | ||
--raw-field event_type=rebuild-site |
Oops, something went wrong.