Skip to content

CI & Deploy

CI & Deploy #320

Workflow file for this run

name: "CI & Deploy"
on:
push:
pull_request:
schedule:
- cron: '0 0 * * 0'
jobs:
ci:
name: Build, Lint & Test
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Setup Node.js and Yarn Cache
uses: actions/setup-node@v4
with:
node-version: '22'
cache: 'yarn'
cache-dependency-path: app/yarn.lock
- name: Install node dependencies
working-directory: ./app
run: yarn install --frozen-lockfile
- name: Install Playwright Browsers & Dependencies
working-directory: ./app
run: npx playwright install --with-deps
- name: Lint
working-directory: ./app
run: |
yarn typecheck
yarn lint
- name: Build
working-directory: ./app
env:
SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }}
run: yarn build
- name: Run Tests
working-directory: ./app
# Start the server in the background and then run tests
run: |
cd build
python3 -m http.server 3000 > /dev/null &
cd ..
yarn test
- name: Package build artifact
working-directory: ./app
run: tar cfJ micropad.tar.xz build/
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: micropad
path: app/micropad.tar.xz
overwrite: true
deploy:
name: Deploy
runs-on: ubuntu-latest
environment:
name: production
url: "https://web.getmicropad.com"
needs: [ci]
if: github.ref == 'refs/heads/master' && github.repository == 'micropad/Micropad-Core'
steps:
- uses: actions/download-artifact@v4
with:
name: micropad
- name: Unpack artifact for deployment
run: |
mkdir app
tar xf micropad.tar.xz -C app
- name: Upload files
uses: oracle-actions/run-oci-cli-command@v1.1
env:
OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
with:
command: os object sync -bn micropad-js --content-type auto --src-dir app/build
canary-deploy:
name: Canary Deploy
runs-on: ubuntu-latest
environment:
name: next
url: "https://next.getmicropad.com"
needs: [ci]
if: github.ref == 'refs/heads/next-dev' && github.repository == 'micropad/Micropad-Core'
steps:
- uses: actions/download-artifact@v4
with:
name: micropad
- name: Unpack artifact for deployment
run: |
mkdir app
tar xf micropad.tar.xz -C app
- name: Upload files
uses: oracle-actions/run-oci-cli-command@v1.1
env:
OCI_CLI_USER: ${{ secrets.OCI_CLI_USER }}
OCI_CLI_TENANCY: ${{ secrets.OCI_CLI_TENANCY }}
OCI_CLI_FINGERPRINT: ${{ secrets.OCI_CLI_FINGERPRINT }}
OCI_CLI_KEY_CONTENT: ${{ secrets.OCI_CLI_KEY_CONTENT }}
OCI_CLI_REGION: ${{ secrets.OCI_CLI_REGION }}
with:
command: os object sync -bn micropad-js-next --content-type auto --src-dir app/build
release:
name: Publish Release on GitHub
runs-on: ubuntu-latest
needs: [ci]
if: github.ref == 'refs/heads/master' && github.event_name != 'schedule'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Get micropad version
id: micropad-version
working-directory: ./app
run: echo "version=v$(npm pkg get version | sed 's/\"//g')" >> $GITHUB_OUTPUT
- uses: actions/download-artifact@v4
with:
name: micropad
- name: Delete existing tag and release
uses: dev-drprasad/delete-tag-and-release@v0.2.1
with:
delete_release: true
tag_name: ${{ steps.micropad-version.outputs.version }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Create Release
uses: softprops/action-gh-release@v2
with:
files: micropad.tar.xz
tag_name: ${{ steps.micropad-version.outputs.version }}
target_commitish: master