diff --git a/.woodpecker.yml b/.woodpecker.yml index 6a0395f..f2c5750 100644 --- a/.woodpecker.yml +++ b/.woodpecker.yml @@ -1,58 +1,58 @@ labels: hostname: "macmini7" + clone: git: image: woodpeckerci/plugin-git settings: partial: false depth: 1 + steps: - # Build Step for staging Branch - build-staging: - name: build-staging + # Build and Push for Staging + build-push-staging: + name: build-push-staging image: woodpeckerci/plugin-docker-buildx - secrets: [REGISTRY_USER, REGISTRY_PASSWORD] + environment: + REGISTRY_USER: + from_secret: REGISTRY_USER + REGISTRY_PASSWORD: + from_secret: REGISTRY_PASSWORD + DOCKER_REGISTRY_USER: + from_secret: DOCKER_REGISTRY_USER + DOCKER_REGISTRY_PASSWORD: + from_secret: DOCKER_REGISTRY_PASSWORD volumes: - /var/run/docker.sock:/var/run/docker.sock commands: - - echo "Building application for staging branch" + - echo "Logging into registries" + - echo "$${DOCKER_REGISTRY_PASSWORD}" | docker login -u "$${DOCKER_REGISTRY_USER}" --password-stdin - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us - - echo compose build + - echo "Building and pushing application for staging" - docker compose -f docker-compose.staging.yml build --no-cache + - docker compose -f docker-compose.staging.yml push when: - - branch: main - - event: push - - path: - include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] + branch: main + event: push - deploy-new: - name: deploy-new - when: - - branch: main - - path: - include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] + # Deploy Staging + deploy-staging: + name: deploy-staging image: woodpeckerci/plugin-docker-buildx - secrets: [REGISTRY_USER, REGISTRY_PASSWORD] + environment: + REGISTRY_USER: + from_secret: REGISTRY_USER + REGISTRY_PASSWORD: + from_secret: REGISTRY_PASSWORD volumes: - /var/run/docker.sock:/var/run/docker.sock commands: + - echo "Deploying to staging environment" - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us - - echo compose push - - docker compose -f docker-compose.staging.yml push - docker stack deploy --with-registry-auth -c ./stack.staging.yml $${CI_REPO_NAME}-staging - - # run-tests: - # name: run-tests-in-container - # image: docker - # commands: - # - docker-compose -f docker-compose.test.yml up --abort-on-container-exit - # - docker-compose -f docker-compose.test.yml down - # when: - # branch: main - # event: push - # volumes: - # - /var/run/docker.sock:/var/run/docker.sock - + when: + branch: main + event: push # Wait for Deploy to Complete wait-for-deploy-staging: @@ -62,95 +62,70 @@ steps: - echo "Waiting for staging deploy step to complete rollout." - sleep 20 when: - - branch: main - - event: push - - # # Run Automated Tests on staging Branch - # test-staging: - # name: run-tests-staging - # image: git.nixc.us/colin/playwright:latest - # secrets: [ base_url ] - # when: - # - branch: main - # - event: push - # - path: - # include: [ 'tests/', 'src/','docker-compose.staging.yml', 'docker-compose.production.yml', '*.tests.ts' ] # Specify paths relevant to tests - # volumes: - # - /var/run/docker.sock:/var/run/docker.sock:ro + branch: main + event: push + # Cleanup Staging cleanup-staging: name: cleanup-staging - when: - - branch: main - - path: - include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] image: woodpeckerci/plugin-docker-buildx - secrets: [REGISTRY_USER, REGISTRY_PASSWORD] + environment: + REGISTRY_USER: + from_secret: REGISTRY_USER + REGISTRY_PASSWORD: + from_secret: REGISTRY_PASSWORD volumes: - /var/run/docker.sock:/var/run/docker.sock commands: - # - docker stack rm $${CI_REPO_NAME}-staging - ## added fault tolerance for docker stack rm + - echo "Cleaning up staging environment" - for i in {1..5}; do docker stack rm ${CI_REPO_NAME}-staging && break || sleep 10; done - docker compose -f docker-compose.staging.yml down - docker compose -f docker-compose.staging.yml rm -f + when: + branch: main + event: push - # Build Step for staging Branch - build-build-push-production: - name: build-build-push-production + # Build and Push for Production + build-push-production: + name: build-push-production image: woodpeckerci/plugin-docker-buildx - secrets: [REGISTRY_USER, REGISTRY_PASSWORD] + environment: + REGISTRY_USER: + from_secret: REGISTRY_USER + REGISTRY_PASSWORD: + from_secret: REGISTRY_PASSWORD + DOCKER_REGISTRY_USER: + from_secret: DOCKER_REGISTRY_USER + DOCKER_REGISTRY_PASSWORD: + from_secret: DOCKER_REGISTRY_PASSWORD volumes: - /var/run/docker.sock:/var/run/docker.sock commands: - - echo "Building application for staging branch" + - echo "Logging into registries" + - echo "$${DOCKER_REGISTRY_PASSWORD}" | docker login -u "$${DOCKER_REGISTRY_USER}" --password-stdin - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us - - echo compose build + - echo "Building and pushing application for production" - docker compose -f docker-compose.production.yml build --no-cache - docker compose -f docker-compose.production.yml push when: - - branch: production - - event: push - - path: - include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] + branch: main + event: [push, cron] - # Deploy to Production Branch + # Deploy Production deploy-production: name: deploy-production image: woodpeckerci/plugin-docker-buildx - secrets: [REGISTRY_USER, REGISTRY_PASSWORD] + environment: + REGISTRY_USER: + from_secret: REGISTRY_USER + REGISTRY_PASSWORD: + from_secret: REGISTRY_PASSWORD volumes: - /var/run/docker.sock:/var/run/docker.sock commands: + - echo "Deploying to production environment" - echo "$${REGISTRY_PASSWORD}" | docker login -u "$${REGISTRY_USER}" --password-stdin git.nixc.us - docker stack deploy --with-registry-auth -c ./stack.production.yml $${CI_REPO_NAME} when: - - branch: production - - event: push - # - path: - # include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] - - - # # Wait for Deploy to Complete - # wait-for-deploy-production: - # name: wait-for-deploy-production - # image: woodpeckerci/plugin-git - # commands: - # - echo "Waiting for deploy step to complete rollout." - # - sleep 60 - # when: - # - branch: production - # - event: push - - # # Run Post-Deployment Smoke Tests - # post-deploy-smoke-tests-git-nixc-us: - # name: run-post-deploy-smoke-tests-git-nixc-us - # image: git.nixc.us/colin/playwright:latest - # # secrets: [TEST_USER, TEST_PASSWORD] - # environment: - # - BASE_URL=https://git.nixc.us - # when: - # - branch: production - # - event: push - # # - path: - # # include: [ 'stack.production.yml', 'stack.staging.yml', 'docker-compose.staging.yml', 'docker-compose.production.yml', 'Dockerfile', '*.tests.ts' ] \ No newline at end of file + branch: main + event: [push, cron]