# 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.

# This action will make the current branch available
# under https://shiro.staged.apache.org/
name: Stage current branch

on:
  workflow_dispatch: {}


jobs:
  build:
    runs-on: ubuntu-latest

    steps:
      - name: 'Checkout main'
        uses: actions/checkout@v2
        with:
          path: 'src'
          persist-credentials: false

      - run: sed -i.bak 's/site.host=.*/site.host=https:\/\/shiro.staged.apache.org\//g' jbake.properties && rm jbake.properties.bak
        shell: bash
        working-directory: ./src

      - run: mv src/site/assets/robots.staging.txt src/site/assets/robots.txt
        shell: bash
        working-directory: ./src

      - uses: actions/setup-java@v2
        with:
          java-version: '11'
          distribution: 'temurin'

      - run: mvn process-classes --show-version --errors --batch-mode --no-transfer-progress
        working-directory: ./src

      - name: 'Checkout target'
        uses: actions/checkout@v2
        with:
          repository: 'apache/shiro-site'
          ref: 'asf-staging'
          path: 'site-staging'

      - name: 'Copy to staging'
        run: |
          rsync -a src/target/website/. ./site-staging 
        shell: bash

      - name: 'commit staging'
        working-directory: ./site-staging
        run: |
          git config user.name "GitHub Actions Bot"
          git config user.email "<>"
          git add .
          git commit -m "staging $(date -Is)" 
          git push
        shell: bash

