DevShop #4483
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: DevShop | |
on: | |
push: | |
branches: 1.x | |
pull_request: | |
types: [opened, synchronize] | |
schedule: | |
- cron: "0 0 * * *" | |
- cron: "0 12 * * *" | |
env: | |
# Set ANSIBLE_VERBOSITY to 1,2 or 3 when needed for development. | |
ANSIBLE_VERBOSITY: 0 | |
DEBUG_COMMAND: "docker-compose exec -T devshop.server systemctl status --no-pager" | |
GITHUB_TOKEN: ${{ secrets.INPUT_GITHUB_TOKEN }} | |
GITHUB_PR_NUMBER: ${{ github.event.pull_request.number }} | |
GITHUB_PR_SHA: ${{ github.event.pull_request.head.sha }} | |
GITHUB_RUN_LOG_URL: https://github.com/opendevshop/devshop/actions/runs/${{ github.run_id }} | |
DEVSHOP_TESTS_ARTIFACTS_PATH: "/usr/share/devshop/.github/test-artifacts" | |
COMMAND: "echo 'DevShop Server Online, launched by GitHub Actions.'" | |
DEVSHOP_DOCKER_COMMAND_RUN: "echo 'Skipping DEVSHOP_DOCKER_COMMAND_RUN (ansible-playbook), so that GitHub Actions can run in a separate step.'" | |
DOCKER_COMMAND_POST: "echo 'GitHub Actions Container was launched.'" | |
# Load vars from the vars.ci.yml file. | |
ANSIBLE_PLAYBOOK_COMMAND_OPTIONS_ARG: "--extra-vars=@/usr/share/devshop/vars.ci.yml" | |
ANSIBLE_PLAYBOOK_COMMAND_OPTIONS: "--extra-vars=@/usr/share/devshop/vars.ci.yml" | |
GIT_REF: 1.x | |
# Prevents including docker-compose.override, which is for local development. | |
COMPOSE_FILE: docker-compose.yml:docker-compose.ci.yml | |
jobs: | |
docker: | |
name: "${{ matrix.action }} PHP ${{ matrix.php }}" | |
# description: Build every docker container, then install DevShop to confirm they work. | |
strategy: | |
fail-fast: false | |
matrix: | |
php: | |
# @TODO: Container builds are failing due to ubuntu 18 EOL. Once builds on 20 + 22 work, put these tests back in place. | |
# - '7.4' | |
- '8.0' | |
# - '8.1' | |
action: | |
# - Build | |
- Test | |
os: | |
# - 'ubuntu1804' | |
- 'ubuntu2004' | |
env: | |
OS: "${{ matrix.os }}" | |
#DEVSHOP_DOCKER_IMAGE: "devshop/server:php${{ matrix.php }}" | |
DEVSHOP_DOCKER_IMAGE: "devshop/server:latest" | |
HOSTNAME: "devshop.${{ github.event.pull_request.number }}.${{ matrix.os }}.actions.github.com" | |
ANSIBLE_EXTRA_VARS: "php_version=${{ matrix.php }}" | |
runs-on: ubuntu-20.04 | |
steps: | |
# By default, actions/checkout uses the current SHA for the branch it is testing. See on.push.branches: 1.x | |
# https://github.com/opendevshop/devshop/runs/1517209717?check_suite_focus=true#step:2:465 | |
# For Pull Requests, actions/checkout will use a Merge SHA by default. | |
# This code sets ref to the PR head SHA instead, so it matches what developers see. | |
- name: Check Out Sourcecode | |
uses: actions/checkout@v2 | |
if: github.event_name!='pull_request' | |
# Fetch all branches and tags so composer can resolve the version. | |
- name: Check Out Pull Request Sourcecode | |
uses: actions/checkout@v2 | |
if: github.event_name=='pull_request' | |
with: | |
ref: ${{ github.event.pull_request.head.sha }} | |
fetch-depth: 0 | |
# github.ref_name is the branch name on branch builds. | |
# On PRs ref_name is `PR#/merge`. | |
- name: Prepare Non Pull Request-only environment | |
if: github.event_name!='pull_request' | |
run: | | |
echo "php_version: '${{ matrix.php }}'" >> vars.ci.yml | |
echo "devshop_version: ${{ github.ref_name }}" >> vars.ci.yml | |
echo "aegir_user_uid: 1001" >> vars.ci.yml | |
echo "aegir_user_gid: 1001" >> vars.ci.yml | |
# github.head_ref is the PR branch name. | |
- name: Prepare Pull Request-only environment | |
if: github.event_name=='pull_request' | |
run: | | |
echo "php_version: '${{ matrix.php }}'" >> vars.ci.yml | |
echo "devshop_version: ${{ github.head_ref }}" >> vars.ci.yml | |
echo "devshop_cli_repo: ${{ github.event.pull_request.head.repo.clone_url }}" >> vars.ci.yml | |
- name: Prepare Pull Request-only environment | |
if: github.event_name=='pull_request' | |
run: | | |
echo "GIT_REF=${{ github.head_ref }}" >> $GITHUB_ENV | |
git switch --create ${{ github.head_ref }} | |
chmod 777 ./.github/test-artifacts | |
- name: "vars.ci.yml" | |
run: cat vars.ci.yml | |
# Build "devshop.server" | |
- name: "Build devshop/server:php${{ matrix.php }}" | |
working-directory: docker | |
run: docker-compose build | |
if: matrix.action == 'Build' | |
- name: "Pull devshop/server:latest" | |
working-directory: docker | |
run: docker-compose pull | |
if: matrix.action == 'Test' | |
# Launch Container | |
- name: "Launch devshop/server:latest container" | |
working-directory: docker | |
run: | | |
docker-compose up --detach | |
sleep 3 | |
docker-compose logs | |
docker-compose exec -T devshop.server /usr/share/devshop/scripts/devshop-logo "GitHub Actions Container populated with code. Running SHA ${GITHUB_PR_SHA}" | |
- name: "Git Status" | |
working-directory: docker | |
run: git status | |
- name: "Review Container Environment" | |
working-directory: docker | |
run: | | |
docker-compose ps -a | |
docker ps -a | |
docker inspect docker_devshop.server_1 | |
docker-compose exec -T devshop.server env | |
docker-compose exec -T devshop.server systemctl status --no-pager | |
sleep 4 | |
- name: "Install DevShop (devshop.server/play.yml --tags=runtime)" | |
working-directory: docker | |
# Since the container is launched with a new DEVSHOP_DOCKER_COMMAND_RUN, run the default. | |
run: | | |
docker-compose exec -T devshop.server bash -c '${DEFAULT_DEVSHOP_DOCKER_COMMAND_RUN}' | |
# docker-compose exec -T devshop.remote bash -c '${DEFAULT_DEVSHOP_DOCKER_COMMAND_RUN}' | |
- name: "Test DevShop" | |
working-directory: docker | |
run: docker-compose exec -T --user aegir devshop.server /usr/share/devshop/tests/devshop-tests.sh | |
- name: Save Docker Logs as Artifacts | |
working-directory: docker | |
if: always() | |
run: | | |
docker ps -a > ../.github/test-artifacts/artifact-docker-ps.log && \ | |
$DEBUG_COMMAND > ../.github/test-artifacts/artifact-debug-command-output.log && \ | |
docker-compose logs > ../.github/test-artifacts/artifact-docker-compose.log | |
- name: Upload Test Artifacts | |
uses: actions/upload-artifact@v2 | |
if: always() | |
with: | |
name: TestFailures | |
path: ./.github/test-artifacts | |
# - name: Upload Log Artifacts | |
# uses: actions/upload-artifact@v2 | |
# if: always() | |
# with: | |
# name: DockerLogs | |
# path: artifact-* |