Deploy main branch as website #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
# Workflow for publishing the students' website along with additional helpful information | |
name: Deploy main branch as website | |
on: | |
push: | |
branches: [main] | |
# Allows you to run this workflow manually from the Actions tab | |
workflow_dispatch: | |
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages | |
permissions: | |
contents: read | |
pages: write | |
id-token: write | |
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. | |
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. | |
concurrency: | |
group: "pages" | |
cancel-in-progress: false | |
jobs: | |
deploy: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Use Node.js ${{ matrix.node-version }} | |
uses: actions/setup-node@v3 | |
with: | |
node-version: ${{ matrix.node-version }} | |
- id: get-repo-values | |
name: Get repository values | |
run: | | |
url=https://$(echo "${{github.repository}}" | sed "s/\//.github.io\//") | |
echo "url=$url" >> $GITHUB_OUTPUT | |
- name: Update package.json homepage | |
uses: jossef/action-set-json-field@v1 | |
with: | |
file: package.json | |
field: homepage | |
value: ${{ steps.get-repo-values.outputs.url }} | |
# create_redirects | |
- name: Create Redirects and Links | |
id: create_redirects | |
run: | | |
mkdir -p dist | |
echo "<html><head>\ | |
<meta http-equiv='refresh' content='0; URL=${{github.server_url}}/${{github.repository}}' />\ | |
</head><body>Redirecting to repository</body></html>" > ./dist/repo.html | |
mkdir -p docs | |
cp README.md docs/index.md | |
echo "# Quick Links" > docs/quick-links.md | |
echo "* [Repository](../repo.html)" >> docs/quick-links.md | |
echo "<html><head>\ | |
<meta http-equiv='refresh' content='0; URL=docs/quick-links' />\ | |
</head><body>Redirecting to quick links page</body></html>" > ./dist/quick.html | |
# Install node packages | |
- name: Install | |
id: install | |
run: | | |
echo "<html><body><pre>" > ./dist/installation.html | |
npm install |& tee -a ./dist/installation.html | |
echo "</pre></body></html>" >> ./dist/installation.html | |
echo "* [Installation](../installation.html)" >> docs/quick-links.md | |
# Run linter | |
- name: Run Linter | |
id: lint | |
run: | | |
npm run eslint-output | |
echo "* [Linter](../lint.html)" >> docs/quick-links.md | |
# Build the project | |
- name: Build the project | |
id: build | |
run: | | |
echo "<html><body><pre>" > ./dist/build.html | |
npm run build |& tee -a ./dist/build.html | |
mv ./build/* ./dist | |
echo "</pre></body></html>" >> ./dist/build.html | |
echo "* [Build](../build.html)" >> docs/quick-links.md | |
# Run Tests | |
- name: Run Tests | |
id: test | |
run: | | |
echo "<html><body><pre>" > ./dist/tests.html | |
npm run test -- --coverage |& tee -a ./dist/tests.html | |
echo "</pre></body></html>" >> ./dist/tests.html | |
echo "* [Tests](../tests.html)" >> docs/quick-links.md | |
# Verify Integrity | |
- name: Verify Integrity | |
if: ${{ !cancelled() }} | |
id: integrity | |
run: | | |
echo "<html><body><pre>" > ./dist/integrity.html | |
find src -type f -name "*.test.ts" -exec md5sum {} + >> ./dist/integrity.html | |
find src -type f -name "*.test.tsx" -exec md5sum {} + >> ./dist/integrity.html | |
md5sum .eslintrc.js >> ./dist/integrity.html | |
md5sum jest.config.js >> ./dist/integrity.html | |
md5sum tsconfig.json >> ./dist/integrity.html | |
md5sum .github/workflows/deploy.yml >> ./dist/integrity.html | |
echo "</pre></body></html>" >> ./dist/integrity.html | |
echo "* [Integrity](../integrity.html)" >> docs/quick-links.md | |
# Create GitInspector Report | |
- name: Create GitInspector Report | |
if: ${{ !cancelled() }} | |
id: gitinspector | |
run: | | |
git clone https://github.com/jpwhite3/gitinspector.git | |
python ./gitinspector/gitinspector.py ./ --grading --format=html -f tsx,ts,html,css -x ./gitinspector -x ./node_modules -x ./wbcore > ./dist/git.html | |
echo "* [Git Inspector](../git.html)" >> docs/quick-links.md | |
# Generate HTML from Markdown in Docs/ | |
- name: Generate HTML from Markdown in Docs/ | |
if: ${{ !cancelled() }} | |
id: markdown-docs | |
uses: ldeluigi/markdown-docs@latest | |
with: | |
src: docs | |
dst: dist/docs/ | |
#- name: Handle Failure | |
# run: | | |
# echo "<html><body><h1>Build Failure</h1><p>The build failed during one of the steps.</p>" > ./dist/index.html | |
#- uses: austenstone/[email protected] | |
# id: job-summary | |
# with: | |
# create-pdf: false | |
#- run: | | |
# echo "${{ steps.job-summary.outputs.job-summary }}" >> ./dist/index.html | |
# echo "</body></html>" >> ./dist/index.html | |
# Deploy | |
- name: Setup Pages | |
uses: actions/configure-pages@v3 | |
if: ${{ !cancelled() }} | |
- name: Upload artifact | |
uses: actions/upload-pages-artifact@v2 | |
if: ${{ !cancelled() }} | |
with: | |
path: "dist/" | |
- name: Deploy to GitHub Pages | |
id: deployment | |
uses: actions/deploy-pages@v2 | |
if: ${{ !cancelled() }} |