-
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(monorepo): Added full implementation of CI workflow
- Loading branch information
1 parent
ae42856
commit a5ee748
Showing
1 changed file
with
358 additions
and
17 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,4 +1,4 @@ | ||
name: "Continuous Integration" | ||
name: CI/CD | ||
|
||
on: | ||
workflow_dispatch: | ||
|
@@ -8,25 +8,366 @@ on: | |
required: false | ||
push: | ||
branches: | ||
- "main" | ||
- "next" | ||
- "beta" | ||
- "experimental" | ||
- main | ||
|
||
env: | ||
CI: true | ||
# NX_CLOUD_DISTRIBUTED_EXECUTION: true # this enables DTE | ||
# NX_CLOUD_DISTRIBUTED_EXECUTION_AGENT_COUNT: 3 # expected number of agents | ||
# NX_BRANCH: ${{ github.event.number || github.ref_name }} | ||
# NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} | ||
STORM_BOT: Stormie-Bot | ||
STORM_REPOSITORY: ${{ github.repositoryUrl }} | ||
STORM_WORKSPACE_ROOT: ${{ github.workspace }} | ||
GITHUB_ACTOR: ${{ github.actor }} | ||
GITHUB_TOKEN: ${{ github.token }} | ||
NPM_TOKEN: ${{ secrets.STORM_BOT_NPM_TOKEN }} | ||
CARGO_REGISTRY_TOKEN: ${{ secrets.STORM_BOT_CARGO_TOKEN }} | ||
|
||
jobs: | ||
ci: | ||
name: Continuous Integration | ||
if: github.repository == 'storm-software/storm-stack' && (github.ref == | ||
'refs/heads/main' || github.ref == 'refs/heads/next' || github.ref == | ||
'refs/heads/beta' || github.ref == 'refs/heads/experimental') | ||
start: | ||
name: Started CI workflow | ||
if: github.repository == 'storm-software/storm-stack' && github.event.pull_request.draft == false | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Send Slack notification - Deployment started | ||
uses: slackapi/[email protected] | ||
with: | ||
channel-id: "notifications" | ||
payload: | | ||
{ | ||
"text": "Deployment for ${{ github.repository }} has started (In Progress)", | ||
"attachments": [ | ||
{ | ||
"pretext": "Deployment for ${{ github.repository }} has started", | ||
"color": "1fb2a6", | ||
"fields": [ | ||
{ | ||
"title": "Status", | ||
"short": true, | ||
"value": "In Progress" | ||
} | ||
] | ||
} | ||
] | ||
} | ||
env: | ||
SLACK_BOT_TOKEN: ${{ secrets.STORM_BOT_SLACK_TOKEN }} | ||
- name: Send Discord notification - Deployment started | ||
uses: Ilshidur/action-discord@master | ||
with: | ||
args: "Deployment for ${{ github.repository }} has started - #${{ | ||
github.run_number }}" | ||
env: | ||
DISCORD_WEBHOOK: ${{ secrets.STORM_BOT_DISCORD_WEBHOOK }} | ||
DISCORD_USERNAME: ${{ env.STORM_BOT }} | ||
DISCORD_AVATAR: "https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-stormie.png" | ||
DISCORD_EMBEDS: | ||
'[{"title": "Deployment #${{ github.run_number }} has started", | ||
"description": "Deployment for ${{ github.repository }} is currently | ||
in process - #${{ github.run_number }}", "thumbnail": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
}, "image": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/logo-fill.png" | ||
}, "author": { "name": "${{ github.actor }}", "url": | ||
"https://github.com/${{ github.actor }}", "icon_url": | ||
"https://avatars.githubusercontent.com/u/${{ github.actor_id }}?v=4" | ||
}, "fields": [ { "name": "Repository", "value": "${{ | ||
github.repository }}" }, { "name": "Repository URL", "value": "${{ | ||
github.repositoryUrl }}" }, { "name": "Pipeline Status", "value": | ||
"In Progress" }], "color": 2077350, "timestamp": "${{ | ||
github.event.repository.updated_at }}", "url": "${{ | ||
github.event.pull_request.html_url || github.event.head_commit.url | ||
}}", "footer": { "text": "Click here to see the full workflow | ||
details: ${{ github.event.pull_request.html_url || | ||
github.event.head_commit.url }}", "icon_url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
} }]' | ||
- name: Send Telegram notification - Deployment started | ||
uses: storm-software/action-telegram-notify@main | ||
with: | ||
status: "in-progress" | ||
env: | ||
TELEGRAM_TOKEN: ${{ secrets.STORM_BOT_TELEGRAM_TOKEN }} | ||
TELEGRAM_CHAT: ${{ secrets.STORM_BOT_TELEGRAM_NOTIFICATION_CHAT }} | ||
|
||
setup: | ||
name: Setup workspace | ||
if: always() && !cancelled() && !contains(needs.*.result, 'failure') && github.event.pull_request.draft == false | ||
needs: | ||
- start | ||
runs-on: ubuntu-latest | ||
timeout-minutes: 60 | ||
permissions: | ||
actions: read | ||
contents: write | ||
id-token: write | ||
uses: storm-software/storm-ops/.github/workflows/ci-reusable.yml@main | ||
with: | ||
tag: ${{ inputs.tag }} | ||
package-manager: pnpm | ||
package-manager-version: 9.10.0 | ||
storm-bot: Stormie-Bot | ||
secrets: inherit | ||
steps: | ||
- name: Checkout [Pull Request] | ||
uses: actions/checkout@v4 | ||
if: ${{ github.event_name == 'pull_request' }} | ||
with: | ||
# By default, PRs will be checked-out based on the Merge Commit, but we want the actual branch HEAD. | ||
ref: ${{ github.event.pull_request.head.sha }} | ||
# We need to fetch all branches and commits so that Nx affected has a base to compare against. | ||
fetch-depth: 0 | ||
token: ${{ secrets.STORM_BOT_GITHUB_TOKEN }} | ||
|
||
- name: Checkout `main` branch | ||
uses: actions/checkout@v4 | ||
if: ${{ github.event_name != 'pull_request' }} | ||
with: | ||
# We need to fetch all branches and commits so that Nx affected has a base to compare against. | ||
fetch-depth: 0 | ||
token: ${{ secrets.STORM_BOT_GITHUB_TOKEN }} | ||
|
||
- name: Setup workspace | ||
uses: ./.github/actions/setup | ||
with: | ||
working-directory: ./ | ||
|
||
- name: Run Nx Set SHAs | ||
uses: nrwl/nx-set-shas@v4 | ||
with: | ||
main-branch-name: main | ||
|
||
- name: Run build script | ||
run: pnpm build-all | ||
shell: bash | ||
|
||
- name: Release Library Version Updates | ||
run: pnpm release --base=${{ env.NX_BASE }} --head=${{ env.NX_HEAD }} | ||
env: | ||
GITHUB_ACTOR: ${{ github.actor }} | ||
GITHUB_TOKEN: ${{ github.token }} | ||
GH_TOKEN: ${{ github.token }} | ||
NPM_TOKEN: ${{ secrets.STORM_BOT_NPM_TOKEN }} | ||
CARGO_REGISTRY_TOKEN: ${{ secrets.STORM_BOT_CARGO_TOKEN }} | ||
STORM_BOT: Stormie-Bot | ||
STORM_WORKSPACE_ROOT: ${{ github.workspace }} | ||
STORM_REPOSITORY: ${{ github.repositoryUrl }} | ||
TAG: ${{ inputs.tag }} | ||
|
||
success: | ||
needs: | ||
- release | ||
if: ${{ success() }} | ||
name: Send success notification | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Send Slack notification - Deployment successful | ||
uses: slackapi/[email protected] | ||
with: | ||
channel-id: "notifications" | ||
update-ts: ${{ steps.release.outputs.ts }} | ||
payload: | | ||
{ | ||
"text": "Deployment for ${{ github.repository }} has finished (Completed) \n\nPipeline Status: Success \nClick here to see the full workflow details: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}", | ||
"attachments": [ | ||
{ | ||
"pretext": "Deployment for ${{ github.repository }} has finished successfully", | ||
"color": "087f5b", | ||
"fields": [ | ||
{ | ||
"title": "Status", | ||
"short": true, | ||
"value": "Completed" | ||
} | ||
] | ||
} | ||
] | ||
} | ||
env: | ||
SLACK_BOT_TOKEN: ${{ secrets.STORM_BOT_SLACK_TOKEN }} | ||
|
||
- name: Send Discord notification - Deployment successful | ||
uses: Ilshidur/action-discord@master | ||
with: | ||
args: "Deployment for ${{ github.repository }} finished successfully - | ||
#${{ github.run_number }}" | ||
env: | ||
DISCORD_WEBHOOK: ${{ secrets.STORM_BOT_DISCORD_WEBHOOK }} | ||
DISCORD_USERNAME: ${{ env.STORM_BOT }} | ||
DISCORD_AVATAR: "https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-stormie.png" | ||
DISCORD_EMBEDS: | ||
'[{"title": "Deployment #${{ github.run_number }} was successful!", | ||
"description": "Deployment for ${{ github.repository }} has finished | ||
successfully - #${{ github.run_number }}", "thumbnail": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
}, "image": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/logo-fill.png" | ||
}, "author": { "name": "${{ github.actor }}", "url": | ||
"https://github.com/${{ github.actor }}", "icon_url": | ||
"https://avatars.githubusercontent.com/u/${{ github.actor_id }}?v=4" | ||
}, "fields": [ { "name": "Repository", "value": "${{ | ||
github.repository }}" }, { "name": "Repository URL", "value": "${{ | ||
github.repositoryUrl }}" }, { "name": "Pipeline Status", "value": | ||
"Success" }], "color": 556891, "timestamp": "${{ | ||
github.event.repository.updated_at }}", "url": "${{ | ||
github.event.pull_request.html_url || github.event.head_commit.url | ||
}}", "footer": { "text": "Click here to see the full workflow | ||
details: ${{ github.event.pull_request.html_url || | ||
github.event.head_commit.url }}", "icon_url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
}}]' | ||
|
||
- name: Send Telegram notification - Deployment successful | ||
uses: storm-software/action-telegram-notify@main | ||
with: | ||
status: "success" | ||
env: | ||
TELEGRAM_TOKEN: ${{ secrets.STORM_BOT_TELEGRAM_TOKEN }} | ||
TELEGRAM_CHAT: ${{ secrets.STORM_BOT_TELEGRAM_NOTIFICATION_CHAT }} | ||
|
||
failure: | ||
needs: | ||
- release | ||
if: ${{ failure() }} | ||
name: Send failure notification | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Send Slack notification - Deployment failed | ||
uses: slackapi/[email protected] | ||
with: | ||
channel-id: "notifications" | ||
update-ts: ${{ steps.release.outputs.ts }} | ||
payload: | | ||
{ | ||
"text": "Deployment for ${{ github.repository }} has finished (Failure) \n\nPipeline Status: Failure\nError: ${{ job.conclusion }}\nReason: ${{ job.cancelled }}\nConclusion: ${{ job.conclusion }}\nOutput: ${{ job.output }}\nLogs: ${{ job.logs }} \nSteps: ${{ job.steps }} \nActions: ${{ job.actions }} \nServices: ${{ job.services }} \nEnvironment: ${{ job.environment}} \nClick here to see the full workflow details: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}", | ||
"attachments": [ | ||
{ | ||
"pretext": "Deployment for ${{ github.repository }} has finished with failures", | ||
"color": "990000", | ||
"fields": [ | ||
{ | ||
"title": "Status", | ||
"short": true, | ||
"value": "Failure" | ||
} | ||
] | ||
} | ||
] | ||
} | ||
env: | ||
SLACK_BOT_TOKEN: ${{ secrets.STORM_BOT_SLACK_TOKEN }} | ||
|
||
- name: Send Discord notification - Deployment failed | ||
uses: Ilshidur/action-discord@master | ||
with: | ||
args: | ||
"Deployment for ${{ github.repository }} finished with failures - | ||
#${{ github.run_number }}" | ||
env: | ||
DISCORD_WEBHOOK: ${{ secrets.STORM_BOT_DISCORD_WEBHOOK }} | ||
DISCORD_USERNAME: ${{ env.STORM_BOT }} | ||
DISCORD_AVATAR: "https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-stormie.png" | ||
DISCORD_EMBEDS: | ||
'[{"title": "Deployment #${{ github.run_number }} has failed", | ||
"description": "Deployment for ${{ github.repository }} finished | ||
with failures - #${{ github.run_number }}", "thumbnail": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
}, "image": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/logo-fill.png" | ||
}, "author": { "name": "${{ github.actor }}", "url": | ||
"https://github.com/${{ github.actor }}", "icon_url": | ||
"https://avatars.githubusercontent.com/u/${{ github.actor_id }}?v=4" | ||
}, "fields": [ { "name": "Repository", "value": "${{ | ||
github.repository }}" }, { "name": "Repository URL", "value": "${{ | ||
github.repositoryUrl }}" }, { "name": "Pipeline Status", "value": | ||
"Failure" }, { "name": "Event", "value": "${{ github.event_name }}" | ||
}, { "name": "Result", "value": "${{ steps.release.result }}" }, { | ||
"name": "Conclusion", "value": "${{ steps.release.conclusion }}" }, | ||
{ "name": "Output", "value": "${{ toJSON(steps.release.outputs) }}" | ||
}], "color": 10027008, "timestamp": "${{ | ||
github.event.repository.updated_at }}", "url": "${{ | ||
github.event.pull_request.html_url || github.event.head_commit.url | ||
}}", "footer": { "text": "Click here to see the full workflow | ||
details: ${{ github.event.pull_request.html_url || | ||
github.event.head_commit.url }}", "icon_url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
} }]' | ||
|
||
- name: Send Telegram notification - Deployment failed | ||
uses: storm-software/action-telegram-notify@main | ||
with: | ||
status: "failed" | ||
env: | ||
TELEGRAM_TOKEN: ${{ secrets.STORM_BOT_TELEGRAM_TOKEN }} | ||
TELEGRAM_CHAT: ${{ secrets.STORM_BOT_TELEGRAM_NOTIFICATION_CHAT }} | ||
|
||
cancelled: | ||
needs: | ||
- release | ||
if: ${{ cancelled() }} | ||
name: Send cancelled notification | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Send Slack notification - Deployment cancelled | ||
uses: slackapi/[email protected] | ||
with: | ||
channel-id: "notifications" | ||
update-ts: ${{ steps.release.outputs.ts }} | ||
payload: | | ||
{ | ||
"text": "Deployment for ${{ github.repository }} has finished (Cancelled) \n\nPipeline Status: Cancelled\nError: ${{ job.conclusion }}\nReason: ${{ job.cancelled }}\nConclusion: ${{ job.conclusion }}\nOutput: ${{ job.output }}\nLogs: ${{ job.logs }} \nSteps: ${{ job.steps }} \nActions: ${{ job.actions }} \nServices: ${{ job.services }} \nEnvironment: ${{ job.environment}} \nClick here to see the full workflow details: ${{ github.event.pull_request.html_url || github.event.head_commit.url }}", | ||
"attachments": [ | ||
{ | ||
"pretext": "Deployment for ${{ github.repository }} has been cancelled", | ||
"color": "990000", | ||
"fields": [ | ||
{ | ||
"title": "Status", | ||
"short": true, | ||
"value": "Cancelled" | ||
} | ||
] | ||
} | ||
] | ||
} | ||
env: | ||
SLACK_BOT_TOKEN: ${{ secrets.STORM_BOT_SLACK_TOKEN }} | ||
|
||
- name: Send Discord notification - Deployment cancelled | ||
uses: Ilshidur/action-discord@master | ||
with: | ||
args: | ||
"Deployment for ${{ github.repository }} has been cancelled - #${{ | ||
github.run_number }}" | ||
env: | ||
DISCORD_WEBHOOK: ${{ secrets.STORM_BOT_DISCORD_WEBHOOK }} | ||
DISCORD_USERNAME: ${{ env.STORM_BOT }} | ||
DISCORD_AVATAR: "https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-stormie.png" | ||
DISCORD_EMBEDS: | ||
'[{"title": "Deployment #${{ github.run_number }} was cancelled", | ||
"description": "Deployment for ${{ github.repository }} was | ||
cancelled before it could complete normal execution - #${{ | ||
github.run_number }}", "thumbnail": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
}, "image": { "url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/logo-fill.png" | ||
}, "author": { "name": "${{ github.actor }}", "url": | ||
"https://github.com/${{ github.actor }}", "icon_url": | ||
"https://avatars.githubusercontent.com/u/${{ github.actor_id }}?v=4" | ||
}, "fields": [ { "name": "Repository", "value": "${{ | ||
github.repository }}" }, { "name": "Repository URL", "value": "${{ | ||
github.repositoryUrl }}" }, { "name": "Pipeline Status", "value": | ||
"Cancelled" }, { "name": "Event", "value": "${{ github.event_name | ||
}}" }, { "name": "Result", "value": "${{ steps.release.result }}" }, | ||
{ "name": "Conclusion", "value": "${{ steps.release.conclusion }}" | ||
}, { "name": "Output", "value": "${{ toJSON(steps.release.outputs) | ||
}}" }], "color": 16565273, "timestamp": "${{ | ||
github.event.repository.updated_at }}", "url": "${{ | ||
github.event.pull_request.html_url || github.event.head_commit.url | ||
}}", "footer": { "text": "Click here to see the full workflow | ||
details: ${{ github.event.pull_request.html_url || | ||
github.event.head_commit.url }}", "icon_url": | ||
"https://pub-761b436209f44a4d886487c917806c08.r2.dev/icon-fill.png" | ||
} }]' | ||
|
||
- name: Send Telegram notification - Deployment cancelled | ||
uses: storm-software/action-telegram-notify@main | ||
with: | ||
status: "cancelled" | ||
env: | ||
TELEGRAM_TOKEN: ${{ secrets.STORM_BOT_TELEGRAM_TOKEN }} | ||
TELEGRAM_CHAT: ${{ secrets.STORM_BOT_TELEGRAM_NOTIFICATION_CHAT }} |