# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements. See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

name: CI

on:
  push:
  pull_request:
    types: [opened, synchronize, reopened]

jobs:
  build-publish:
    name: Build & Publish
    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false

    steps:
      - name: Checkout Repository
        uses: actions/checkout@v2.4.0
        with:
          fetch-depth: 0

      - name: Build
        uses: docker://jekyll/jekyll:4.2.0
        env:
          JEKYLL_ROOTLESS: 1
        with:
          args: jekyll build --source site

      - name: Publish
        if: ${{ github.repository == 'apache/daffodil-site' && github.ref == 'refs/heads/main' }}
        run: |
          git checkout asf-site
          rm -rf content
          mv target content
          git add content
          git config --local user.email "dev@daffodil.apache.org"
          git config --local user.name "Apache Daffodil Site Autobuild"
          git commit -a --allow-empty -m "Publishing from ${{ github.sha }}"
          git push --force "https://${{ github.actor }}:${{ github.token }}@github.com/${{ github.repository }}.git" asf-site
