name: scribe CI on: push: branches: "*" pull_request: branches: "*" jobs: check-format: runs-on: ubuntu-latest container: image: crystallang/crystal:1.0.0 steps: - uses: actions/checkout@v2 - name: Format run: crystal tool format --check specs: runs-on: ubuntu-latest container: image: crystallang/crystal:1.0.0 env: LUCKY_ENV: test DB_HOST: postgres services: postgres: image: postgres:12-alpine env: POSTGRES_PASSWORD: postgres ports: - 5432:5432 # Set health checks to wait until postgres has started options: >- --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5 steps: - uses: actions/checkout@v2 - name: Install PostgreSQL client run: | apt-get update apt-get -yqq install libpq-dev postgresql-client - name: Install browser run: apt-get -yqq install chromium-browser - uses: actions/setup-node@v1 with: node-version: '12.x' - name: "Install yarn" run: npm install -g yarn - name: Get yarn cache directory path id: yarn-cache-dir-path run: echo "::set-output name=dir::$(yarn cache dir)" - name: Set up Yarn cache uses: actions/cache@v2 with: path: ${{ steps.yarn-cache-dir-path.outputs.dir }} key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-yarn- - name: Set up Node cache uses: actions/cache@v2 id: node-cache # use this to check for `cache-hit` (`steps.node-cache.outputs.cache-hit != 'true'`) with: path: '**/node_modules' key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-node- - name: Set up Crystal cache uses: actions/cache@v2 id: crystal-cache with: path: | ~/.cache/crystal lib lucky_tasks key: ${{ runner.os }}-crystal-${{ hashFiles('**/shard.lock') }} restore-keys: | ${{ runner.os }}-crystal- - name: Install shards if: steps.crystal-cache.outputs.cache-hit != 'true' run: shards check || shards install - name: Install yarn packages if: steps.node-cache.outputs.cache-hit != 'true' run: yarn install --frozen-lockfile --no-progress - name: Compiling assets run: yarn prod - name: Build lucky_tasks if: steps.crystal-cache.outputs.cache-hit != 'true' run: crystal build tasks.cr -o ./lucky_tasks - name: Prepare database run: | ./lucky_tasks db.create ./lucky_tasks db.migrate ./lucky_tasks db.seed.required_data - name: Run tests run: crystal spec