name: Github # Trigger on pushes to master or pull requests to master, but not both. on: push: branches: - master pull_request: branches: - master workflow_dispatch: inputs: debug_enabled: description: 'Run the build with tmate debugging enabled (https://github.com/marketplace/actions/debugging-with-tmate)' required: false default: false jobs: # Build Docker image and push to Github Container Registry. # # https://docs.github.com/en/packages/working-with-a-github-packages-registry/working-with-the-container-registry # https://docs.github.com/en/packages/managing-github-packages-using-github-actions-workflows/publishing-and-installing-a-package-with-github-actions # https://docs.github.com/en/actions/guides/publishing-docker-images docker: runs-on: ubuntu-latest steps: # https://github.com/docker/setup-buildx-action - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 # https://github.com/docker/login-action - name: Login to Github Container Registry uses: docker/login-action@v1 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ github.token }} # Generate Docker tags from Git tags. # https://github.com/docker/metadata-action - name: Generate Docker tags uses: docker/metadata-action@v3 id: metadata with: images: ghcr.io/${{ github.repository }} tags: | type=sha,format=short,prefix= type=sha,format=long,prefix= type=ref,event=branch type=ref,event=tag type=ref,event=pr # Tag `latest` on every commit pushed to master # https://github.com/docker/metadata-action/issues/112 flavor: | latest=${{ github.ref == 'refs/heads/master' }} # https://github.com/docker/build-push-action - name: Build image uses: docker/build-push-action@v2 with: push: true tags: ${{ steps.metadata.outputs.tags }} labels: ${{ steps.metadata.outputs.labels }} # https://github.com/docker/build-push-action/blob/master/docs/advanced/cache.md#registry-cache # https://dev.to/pst418/speed-up-multi-stage-docker-builds-in-ci-cd-with-buildkit-s-registry-cache-11gi cache-from: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache cache-to: type=registry,ref=ghcr.io/${{ github.repository }}:buildcache,mode=max test: runs-on: ubuntu-latest needs: docker container: image: ghcr.io/danbooru/danbooru:${{ github.sha }} options: --user root env: RAILS_ENV: test PARALLEL_WORKERS: 8 # number of parallel tests to run RUBYOPT: -W0 # silence ruby warnings VIPS_WARNING: 0 # silence libvips warnings CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} DATABASE_URL: postgresql://danbooru:danbooru@postgres/danbooru ARCHIVE_DATABASE_URL: postgresql://danbooru:danbooru@postgres/danbooru DANBOORU_SECRET_KEY_BASE: 1234 DANBOORU_AWS_SQS_ENABLED: false DANBOORU_TWITTER_API_KEY: ${{ secrets.DANBOORU_TWITTER_API_KEY }} DANBOORU_TWITTER_API_SECRET: ${{ secrets.DANBOORU_TWITTER_API_SECRET }} DANBOORU_PIXIV_PHPSESSID: ${{ secrets.DANBOORU_PIXIV_PHPSESSID }} DANBOORU_NIJIE_LOGIN: ${{ secrets.DANBOORU_NIJIE_LOGIN }} DANBOORU_NIJIE_PASSWORD: ${{ secrets.DANBOORU_NIJIE_PASSWORD }} DANBOORU_NICO_SEIGA_LOGIN: ${{ secrets.DANBOORU_NICO_SEIGA_LOGIN }} DANBOORU_NICO_SEIGA_PASSWORD: ${{ secrets.DANBOORU_NICO_SEIGA_PASSWORD }} DANBOORU_TUMBLR_CONSUMER_KEY: ${{ secrets.DANBOORU_TUMBLR_CONSUMER_KEY }} DANBOORU_DEVIANTART_CLIENT_ID: ${{ secrets.DANBOORU_DEVIANTART_CLIENT_ID }} DANBOORU_DEVIANTART_CLIENT_SECRET: ${{ secrets.DANBOORU_DEVIANTART_CLIENT_SECRET }} DANBOORU_PAWOO_CLIENT_ID: ${{ secrets.DANBOORU_PAWOO_CLIENT_ID }} DANBOORU_PAWOO_CLIENT_SECRET: ${{ secrets.DANBOORU_PAWOO_CLIENT_SECRET }} DANBOORU_BARAAG_CLIENT_ID: ${{ secrets.DANBOORU_BARAAG_CLIENT_ID }} DANBOORU_BARAAG_CLIENT_SECRET: ${{ secrets.DANBOORU_BARAAG_CLIENT_SECRET }} DANBOORU_DISCORD_WEBHOOK_ID: ${{ secrets.DANBOORU_DISCORD_WEBHOOK_ID }} DANBOORU_DISCORD_WEBHOOK_SECRET: ${{ secrets.DANBOORU_DISCORD_WEBHOOK_SECRET }} DANBOORU_RAKISMET_KEY: ${{ secrets.DANBOORU_RAKISMET_KEY }} DANBOORU_RAKISMET_URL: ${{ secrets.DANBOORU_RAKISMET_URL }} DANBOORU_IP_REGISTRY_API_KEY: ${{ secrets.DANBOORU_IP_REGISTRY_API_KEY }} DANBOORU_GOOGLE_CLOUD_CREDENTIALS: ${{ secrets.DANBOORU_GOOGLE_CLOUD_CREDENTIALS }} DANBOORU_STRIPE_SECRET_KEY: ${{ secrets.DANBOORU_STRIPE_SECRET_KEY }} DANBOORU_STRIPE_PUBLISHABLE_KEY: ${{ secrets.DANBOORU_STRIPE_PUBLISHABLE_KEY }} DANBOORU_STRIPE_WEBHOOK_SECRET: ${{ secrets.DANBOORU_STRIPE_WEBHOOK_SECRET }} DANBOORU_STRIPE_GOLD_USD_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_GOLD_USD_PRICE_ID }} DANBOORU_STRIPE_GOLD_EUR_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_GOLD_EUR_PRICE_ID }} DANBOORU_STRIPE_PLATINUM_USD_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_PLATINUM_USD_PRICE_ID }} DANBOORU_STRIPE_PLATINUM_EUR_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_PLATINUM_EUR_PRICE_ID }} DANBOORU_STRIPE_GOLD_TO_PLATINUM_USD_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_GOLD_TO_PLATINUM_USD_PRICE_ID }} DANBOORU_STRIPE_GOLD_TO_PLATINUM_EUR_PRICE_ID: ${{ secrets.DANBOORU_STRIPE_GOLD_TO_PLATINUM_EUR_PRICE_ID }} services: postgres: image: evazion/postgres env: POSTGRES_USER: danbooru POSTGRES_PASSWORD: danbooru steps: - name: Setup tmate session uses: mxschmitt/action-tmate@v3 timeout-minutes: 20 if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled }} with: limit-access-to-actor: true sudo: false - name: Prepare database run: | export HOME=/root cd /danbooru bin/rails db:test:prepare apt-get update apt-get -y install --no-install-recommends ruby-dev postgresql-server-dev-all build-essential zlib1g-dev git mkdir ~/archives cd ~/archives git clone https://github.com/evazion/archives . gem install bundler -v 1.13.3 bundle install --binstubs bin/rake db:migrate - name: Run tests run: | export HOME=/root cd /danbooru ln -s packs public/packs-test bin/rails test