mirror of
				https://github.com/zadam/trilium.git
				synced 2025-11-03 21:19:01 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			152 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			152 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: Dev
 | 
						|
on:
 | 
						|
  push:
 | 
						|
    branches: [ main ]
 | 
						|
  pull_request:
 | 
						|
    branches: [ main ]
 | 
						|
 | 
						|
concurrency:
 | 
						|
  group: ${{ github.workflow }}-${{ github.ref }}
 | 
						|
  cancel-in-progress: true
 | 
						|
 | 
						|
env:
 | 
						|
  GHCR_REGISTRY: ghcr.io
 | 
						|
  DOCKERHUB_REGISTRY: docker.io
 | 
						|
  IMAGE_NAME: ${{ github.repository}}
 | 
						|
  TEST_TAG: ${{ github.repository}}:test
 | 
						|
 | 
						|
permissions:
 | 
						|
  pull-requests: write  # for PR comments
 | 
						|
 | 
						|
jobs:
 | 
						|
  check-affected:
 | 
						|
    name: Check affected jobs (NX)
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    steps:
 | 
						|
      - name: Checkout the repository
 | 
						|
        uses: actions/checkout@v4
 | 
						|
        with:
 | 
						|
          fetch-depth: 0  # needed for https://github.com/marketplace/actions/nx-set-shas
 | 
						|
 | 
						|
      - uses: pnpm/action-setup@v4
 | 
						|
      - name: Set up node & dependencies
 | 
						|
        uses: actions/setup-node@v4
 | 
						|
        with:
 | 
						|
          node-version: 22
 | 
						|
          cache: 'pnpm'
 | 
						|
      - name: Install dependencies
 | 
						|
        run: pnpm install --frozen-lockfile
 | 
						|
 | 
						|
      - uses: nrwl/nx-set-shas@v4
 | 
						|
      - name: Check affected
 | 
						|
        run: pnpm nx affected --verbose -t typecheck build rebuild-deps test-build
 | 
						|
 | 
						|
  test_dev:
 | 
						|
    name: Test development
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    needs:
 | 
						|
      - check-affected
 | 
						|
    steps:
 | 
						|
      - name: Checkout the repository
 | 
						|
        uses: actions/checkout@v4
 | 
						|
 | 
						|
      - uses: pnpm/action-setup@v4
 | 
						|
      - name: Set up node & dependencies
 | 
						|
        uses: actions/setup-node@v4
 | 
						|
        with:
 | 
						|
          node-version: 22
 | 
						|
          cache: "pnpm"
 | 
						|
      - run: pnpm install --frozen-lockfile
 | 
						|
 | 
						|
      - name: Run the unit tests
 | 
						|
        run: pnpm run test:all
 | 
						|
 | 
						|
  build_docker:
 | 
						|
    name: Build Docker image
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    needs:
 | 
						|
      - test_dev
 | 
						|
      - check-affected
 | 
						|
    steps:
 | 
						|
      - uses: actions/checkout@v4
 | 
						|
      - uses: pnpm/action-setup@v4
 | 
						|
      - name: Install dependencies
 | 
						|
        run: pnpm install --frozen-lockfile
 | 
						|
      - name: Update build info
 | 
						|
        run: pnpm run chore:update-build-info
 | 
						|
      - name: Trigger client build
 | 
						|
        run: pnpm nx run client:build
 | 
						|
      - name: Send client bundle stats to RelativeCI
 | 
						|
        if: false
 | 
						|
        uses: relative-ci/agent-action@v3
 | 
						|
        with:
 | 
						|
          webpackStatsFile: ./apps/client/dist/webpack-stats.json
 | 
						|
          key: ${{ secrets.RELATIVE_CI_CLIENT_KEY }}
 | 
						|
      - name: Trigger server build
 | 
						|
        run: pnpm nx run server:build
 | 
						|
      - uses: docker/setup-buildx-action@v3
 | 
						|
      - uses: docker/build-push-action@v6
 | 
						|
        with:
 | 
						|
          context: apps/server
 | 
						|
          cache-from: type=gha
 | 
						|
          cache-to: type=gha,mode=max
 | 
						|
  test_docker:
 | 
						|
    name: Check Docker build
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    needs:
 | 
						|
      - build_docker
 | 
						|
      - check-affected
 | 
						|
    strategy:
 | 
						|
      matrix:
 | 
						|
        include:
 | 
						|
          - dockerfile: Dockerfile.alpine
 | 
						|
          - dockerfile: Dockerfile
 | 
						|
    steps:
 | 
						|
      - name: Checkout the repository
 | 
						|
        uses: actions/checkout@v4
 | 
						|
 | 
						|
      - uses: pnpm/action-setup@v4
 | 
						|
      - name: Install dependencies
 | 
						|
        run: pnpm install --frozen-lockfile
 | 
						|
 | 
						|
      - name: Update build info
 | 
						|
        run: pnpm run chore:update-build-info
 | 
						|
      - name: Trigger build
 | 
						|
        run: pnpm nx run server:build
 | 
						|
 | 
						|
      - name: Set IMAGE_NAME to lowercase
 | 
						|
        run: echo "IMAGE_NAME=${IMAGE_NAME,,}" >> $GITHUB_ENV
 | 
						|
      - name: Set TEST_TAG to lowercase
 | 
						|
        run: echo "TEST_TAG=${TEST_TAG,,}" >> $GITHUB_ENV
 | 
						|
 | 
						|
      - name: Set up Docker Buildx
 | 
						|
        uses: docker/setup-buildx-action@v3
 | 
						|
 | 
						|
      - name: Build and export to Docker
 | 
						|
        uses: docker/build-push-action@v6
 | 
						|
        with:
 | 
						|
          context: apps/server
 | 
						|
          file: apps/server/${{ matrix.dockerfile }}
 | 
						|
          load: true
 | 
						|
          tags: ${{ env.TEST_TAG }}
 | 
						|
          cache-from: type=gha
 | 
						|
          cache-to: type=gha,mode=max
 | 
						|
 | 
						|
      - name: Validate container run output
 | 
						|
        run: |
 | 
						|
          CONTAINER_ID=$(docker run -d --log-driver=journald --rm --name trilium_local ${{ env.TEST_TAG }})
 | 
						|
          echo "Container ID: $CONTAINER_ID"
 | 
						|
 | 
						|
      - name: Wait for the healthchecks to pass
 | 
						|
        uses: stringbean/docker-healthcheck-action@v3
 | 
						|
        with:
 | 
						|
          container: trilium_local
 | 
						|
          wait-time: 50
 | 
						|
          require-status: running
 | 
						|
          require-healthy: true
 | 
						|
 | 
						|
      # Print the entire log of the container thus far, regardless if the healthcheck failed or succeeded
 | 
						|
      - name: Print entire log
 | 
						|
        if: always()
 | 
						|
        run: journalctl -u docker CONTAINER_NAME=trilium_local --no-pager
 |