name: CI/CD Pipeline run-name: ${{ gitea.event.head_commit.message }} on: push: branches: - dev - master jobs: stamp_build: if: gitea.ref_name == 'master' && !contains(gitea.event.head_commit.message, '[skip ci]') runs-on: self-hosted steps: - name: Stamp composer build from origin/master env: SPEEDBB_REPO: ${{ vars.SPEEDBB_REPO }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_ACTOR: ${{ gitea.actor }} run: | set -e REPO="$SPEEDBB_REPO" if [ -n "$GITEA_TOKEN" ]; then REPO=$(echo "$SPEEDBB_REPO" | sed "s#https://#https://${GITEA_ACTOR}:${GITEA_TOKEN}@#") fi git clone --quiet --branch=master "$REPO" repo cd repo git fetch origin master BUILD="$(git rev-list --count origin/master)" CURRENT="$(php -r 'echo (string) ((json_decode(file_get_contents("composer.json"), true)["build"] ?? ""));')" if [ "$CURRENT" = "$BUILD" ]; then echo "composer.json build already $BUILD; no changes." exit 0 fi BUILD="$BUILD" php -r '$p="composer.json"; $d=json_decode(file_get_contents($p), true); if (!is_array($d)) { fwrite(STDERR, "Invalid composer.json\n"); exit(1);} $d["build"]=getenv("BUILD"); file_put_contents($p, json_encode($d, JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES).PHP_EOL);' git config user.name "speedbb-ci" git config user.email "ci@24unix.net" git add composer.json git commit -m "ci: sync composer build to ${BUILD} [skip ci]" git push origin master deploy: if: gitea.ref_name == 'master' && !contains(gitea.event.head_commit.message, '[skip ci]') runs-on: self-hosted needs: stamp_build steps: - name: Custom Checkout env: ANSIBLE_VAULT_PASSWORD: ${{ secrets.ANSIBLE_VAULT_PASSWORD }} SPEEDBB_REPO: ${{ vars.SPEEDBB_REPO }} PROD_BASE_DIR: ${{ vars.PROD_BASE_DIR }} ANSIBLE_POSIX_ACL: false run: | git clone --quiet --no-checkout --depth=1 --branch=${{ gitea.ref_name }} ${{ vars.SPEEDBB_REPO }} ./repo cd repo git config core.sparseCheckout true echo "ansible/" > .git/info/sparse-checkout git checkout HEAD ls -la cd ansible pwd ls -la cat hosts.ini echo "$ANSIBLE_VAULT_PASSWORD" > .vault_pass.txt ansible-playbook --vault-password-file .vault_pass.txt deploy-to-prod.yaml rm .vault_pass.txt promote_stable: if: gitea.ref_name == 'master' && !contains(gitea.event.head_commit.message, '[skip ci]') runs-on: self-hosted needs: deploy steps: - name: Promote master to stable env: SPEEDBB_REPO: ${{ vars.SPEEDBB_REPO }} GITEA_TOKEN: ${{ secrets.GITEA_TOKEN }} GITEA_ACTOR: ${{ gitea.actor }} run: | set -e REPO="$SPEEDBB_REPO" if [ -n "$GITEA_TOKEN" ]; then REPO=$(echo "$SPEEDBB_REPO" | sed "s#https://#https://${GITEA_ACTOR}:${GITEA_TOKEN}@#") fi git clone --quiet --depth=1 --branch=stable "$REPO" repo cd repo git fetch origin master git merge --ff-only FETCH_HEAD git push origin stable