name: Deploy to Hosting Server on: workflow_dispatch: inputs: target: description: 'Deployment target' required: true default: 'production' jobs: deploy: name: Manual deploy runs-on: ubuntu-latest env: DEPLOY_HOST: ${{ secrets.DEPLOY_HOST }} DEPLOY_PORT: ${{ secrets.DEPLOY_PORT }} DEPLOY_USER: ${{ secrets.DEPLOY_USER }} DEPLOY_PATH: ${{ secrets.DEPLOY_PATH }} DEPLOY_SSH_KEY: ${{ secrets.DEPLOY_SSH_KEY }} GITEA_BASE_URL: ${{ secrets.GITEA_BASE_URL }} GITEA_PACKAGE_OWNER: ${{ secrets.GITEA_PACKAGE_OWNER }} GITEA_PACKAGE_USER: ${{ secrets.GITEAPACKAGEUSER }} GITEA_PACKAGE_TOKEN: ${{ secrets.GITEAPACKAGETOKEN }} steps: - name: Checkout uses: actions/checkout@v4 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: '8.2' extensions: dom, gd, intl, mbstring, mysqli, zip coverage: none - name: Validate Composer config run: composer validate --no-check-publish --strict - name: Install production dependencies run: composer install --no-dev --no-interaction --prefer-dist --no-progress --optimize-autoloader - name: Create deployment artifact run: bash scripts/build-deploy-artifact.sh - name: Publish deployment package run: | test -n "${GITEA_PACKAGE_USER}" test -n "${GITEA_PACKAGE_TOKEN}" BASE_URL="${GITEA_BASE_URL:-https://192.168.3.80}" PACKAGE_OWNER="${GITEA_PACKAGE_OWNER:-melabidi}" PACKAGE_NAME="alrahma_sunday_school" REF_NAME="${GITHUB_REF_NAME:-manual}" SHORT_SHA="$(printf '%s' "${GITHUB_SHA}" | cut -c1-7)" VERSION="$(printf '%s-%s-%s' "${REF_NAME}" "${GITHUB_RUN_NUMBER}" "${SHORT_SHA}" | sed 's/[^A-Za-z0-9._+-]/-/g')" FILE_NAME="${PACKAGE_NAME}-${VERSION}.tar.gz" PACKAGE_URL="${BASE_URL}/api/packages/${PACKAGE_OWNER}/generic/${PACKAGE_NAME}/${VERSION}/${FILE_NAME}" tar -czf "build/${FILE_NAME}" -C build/deploy . echo "Publishing package ${PACKAGE_NAME} ${VERSION} to ${BASE_URL}/-/packages" echo "Package owner: ${PACKAGE_OWNER}" echo "Package file: ${FILE_NAME}" curl --fail-with-body --insecure \ --user "${GITEA_PACKAGE_USER}:${GITEA_PACKAGE_TOKEN}" \ --upload-file "build/${FILE_NAME}" \ "${PACKAGE_URL}" echo "Package uploaded: ${PACKAGE_URL}" - name: Configure SSH run: | test -n "${DEPLOY_HOST}" test -n "${DEPLOY_USER}" test -n "${DEPLOY_PATH}" test -n "${DEPLOY_SSH_KEY}" mkdir -p ~/.ssh chmod 700 ~/.ssh printf '%s\n' "${DEPLOY_SSH_KEY}" > ~/.ssh/deploy_key chmod 600 ~/.ssh/deploy_key SSH_PORT="${DEPLOY_PORT:-22}" ssh-keyscan -p "${SSH_PORT}" "${DEPLOY_HOST}" >> ~/.ssh/known_hosts - name: Deploy files run: | SSH_PORT="${DEPLOY_PORT:-22}" ssh -i ~/.ssh/deploy_key -p "${SSH_PORT}" "${DEPLOY_USER}@${DEPLOY_HOST}" \ "mkdir -p '${DEPLOY_PATH}' '${DEPLOY_PATH}/writable/cache' '${DEPLOY_PATH}/writable/logs' '${DEPLOY_PATH}/writable/session' '${DEPLOY_PATH}/writable/uploads' '${DEPLOY_PATH}/writable/debugbar'" rsync -az --delete \ -e "ssh -i ~/.ssh/deploy_key -p ${SSH_PORT}" \ --exclude '.env' \ --exclude 'writable/cache/***' \ --exclude 'writable/logs/***' \ --exclude 'writable/session/***' \ --exclude 'writable/uploads/***' \ --exclude 'writable/debugbar/***' \ build/deploy/ "${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/" - name: Finalize deployment run: | SSH_PORT="${DEPLOY_PORT:-22}" ssh -i ~/.ssh/deploy_key -p "${SSH_PORT}" "${DEPLOY_USER}@${DEPLOY_HOST}" \ "cd '${DEPLOY_PATH}' && php spark cache:clear || true"