From f40b4513f1eb37a843af44baf71aed59bea29910 Mon Sep 17 00:00:00 2001 From: StoneyDSP Date: Wed, 16 Oct 2024 06:23:28 +0200 Subject: [PATCH] added CI/CD Signed-off-by: StoneyDSP --- .github/workflows/node.yml | 97 ++++++++++++++++++++++++++++++++++++ .github/workflows/static.yml | 77 ++++++++++++++++++++++++++++ 2 files changed, 174 insertions(+) create mode 100644 .github/workflows/node.yml create mode 100644 .github/workflows/static.yml diff --git a/.github/workflows/node.yml b/.github/workflows/node.yml new file mode 100644 index 0000000..91b7bb0 --- /dev/null +++ b/.github/workflows/node.yml @@ -0,0 +1,97 @@ +name: node + +on: + # Runs on all pushes + push: + # # A push is made to a GitHub Pages-enabled branch + # page_build: + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# When pushing new commits, cancel any running builds on that branch +concurrency: + group: node-${{ github.ref }} + cancel-in-progress: true + +env: + PROJECT_NAME: 'ts-web-components' + PROJECT_VERSION: '0.1.0.${{ github.sha }}' + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_ENV: 'production' + BUILD_DIR: 'dist' + TSC_COMPILE_ON_ERROR: false + +jobs: + run: + strategy: + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + node-version: [20, latest] + + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + cache: yarn + cache-dependency-path: yarn.lock + + - name: Environment + shell: bash + working-directory: ${{ github.workspace }} + run: | + cp .env .env.local + cp .env.test .env.test.local + cp .env.development .env.development.local + cp .env.production .env.production.local + + - name: Install + shell: bash + working-directory: ${{ github.workspace }} + run: yarn + + # - name: Test + # shell: bash + # env: + # NODE_ENV: test + # working-directory: ${{ github.workspace }} + # run: yarn test + + - name: Build + shell: bash + env: + NODE_ENV: production + working-directory: ${{ github.workspace }} + run: yarn build + + # - name: Start + # shell: bash + # env: + # NODE_ENV: production + # working-directory: ${{ github.workspace }} + # run: yarn start build + + - name: Pack + shell: bash + env: + NODE_ENV: production + working-directory: ${{ github.workspace }} + run: yarn pack --filename ${{ env.PROJECT_NAME }}-${{ env.PROJECT_VERSION }}-${{ matrix.os }}-node-${{ matrix.node-version }} + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ env.PROJECT_NAME }}-${{ env.PROJECT_VERSION }}-${{ matrix.os }}-node-${{ matrix.node-version }} + path: '${{ github.workspace }}/${{ env.PROJECT_NAME }}-${{ env.PROJECT_VERSION }}-${{ matrix.os }}-node-${{ matrix.node-version }}' + + - name: Download Artifact + uses: actions/download-artifact@v4 + with: + name: ${{ env.PROJECT_NAME }}-${{ env.PROJECT_VERSION }}-${{ matrix.os }}-node-${{ matrix.node-version }} + path: '${{ github.workspace }}' + github-token: ${{ env.GITHUB_TOKEN }} diff --git a/.github/workflows/static.yml b/.github/workflows/static.yml new file mode 100644 index 0000000..3ef2fba --- /dev/null +++ b/.github/workflows/static.yml @@ -0,0 +1,77 @@ +# Simple workflow for deploying static content to GitHub Pages +name: github-pages + +on: + # Runs on pushes targeting the default branch + push: + branches: + - main + - release/* + - '!development/*' + # A push is made to a GitHub Pages-enabled branch + page_build: + # 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 + +env: + GITHUB_PAGES: true + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + NODE_ENV: 'production' + BUILD_PATH: 'dist' + PUBLIC_URL: 'https://nathanjhood.github.io/ts-web-components' + HOST: 'nathanjhood.github.io' + PORT: 80 + HTTPS: true + TSC_COMPILE_ON_ERROR: false + +jobs: + # Single deploy job since we're just deploying + deploy: + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Setup + uses: actions/setup-node@v4 + with: + cache: yarn + cache-dependency-path: yarn.lock + node-version: 20.17 + - name: Install + shell: bash + working-directory: ${{ github.workspace }} + run: yarn + - name: Build + shell: bash + working-directory: ${{ github.workspace }} + run: yarn build + - name: Fix permissions + run: | + chmod -c -R +rX ${{ env.BUILD_PATH }}/ | while read line; do + echo "::warning title=Invalid file permissions automatically fixed::$line" + done + - name: Setup Pages + uses: actions/configure-pages@v5 + - name: Upload artifact + uses: actions/upload-pages-artifact@v3 + with: + # Upload build output + path: ${{ env.BUILD_PATH }}/ + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4