diff --git a/.github/workflows/deploy-on-demand.yml b/.github/workflows/deploy-on-demand.yml
new file mode 100644
index 0000000..52c23e2
--- /dev/null
+++ b/.github/workflows/deploy-on-demand.yml
@@ -0,0 +1,114 @@
+name: OTA Portal Deploy - On Demand
+
+on:
+ workflow_dispatch:
+ inputs:
+ environment:
+ description: "Environment"
+ required: true
+ type: choice
+ options:
+ - dev
+ - stage
+ - preprod
+
+env:
+ SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}
+ SLACK_CHANNEL: "#cloud-builds"
+ SLACK_FOOTER: ""
+ SLACK_USERNAME: GitHub Actions
+ SLACK_ICON: "https://github.githubassets.com/images/modules/logos_page/GitHub-Mark.png"
+ TAG: ${{ github.sha }}
+ PROJECT: ota-admin-portal
+ REGISTRY: fiskercloud.azurecr.io
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ outputs:
+ build-env: ${{ steps.set-env.outputs.ENVIRONMENT }}
+ steps:
+ - name: Slack Notification
+ uses: rtCamp/action-slack-notify@v2
+
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - name: Azure Login
+ uses: azure/login@v1
+ with:
+ creds: ${{ secrets.AZURE_CREDENTIALS }}
+
+ - name: Login to ACR
+ uses: docker/login-action@v2
+ with:
+ registry: ${{ env.REGISTRY }}
+ username: ${{ secrets.AZURE_CLIENT_ID }}
+ password: ${{ secrets.AZURE_CLIENT_SECRET }}
+
+ - name: Set Env
+ env:
+ ENV: ${{ inputs.environment }}
+ id: set-env
+ run: |
+ case ${ENV} in
+ dev)
+ ENVIRONMENT=dev;;
+ stage)
+ ENVIRONMENT=stg;;
+ preprod)
+ ENVIRONMENT=prd;;
+ *)
+ ENVIRONMENT=dev;;
+ esac
+ echo "ENVIRONMENT=${ENVIRONMENT}" >> $GITHUB_ENV
+ echo "ENVIRONMENT=${ENVIRONMENT}" >> $GITHUB_OUTPUT
+
+ - name: Set up Docker Buildx
+ uses: docker/setup-buildx-action@v2
+
+ - name: Build and push
+ uses: docker/build-push-action@v3
+ with:
+ context: .
+ build-args: ENVIRONMENT=${{ env.ENVIRONMENT }}
+ push: true
+ tags: ${{ env.REGISTRY }}/${{ env.PROJECT }}:${{ env.TAG }}-${{ env.ENVIRONMENT }}
+ cache-from: type=gha
+ cache-to: type=gha,mode=max
+
+ deploy:
+ needs: build
+ runs-on: [self-hosted, azure]
+ env:
+ ENVIRONMENT: ${{ needs.build.outputs.build-env }}
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v3
+
+ - uses: rtCamp/action-slack-notify@v2
+ env:
+ MSG_MINIMAL: true
+ SLACK_MESSAGE: "Deploying ${{ env.PROJECT }} to ${{ inputs.environment }}... :partydeploy:"
+
+ - name: Deploy
+ run: |-
+ helm upgrade \
+ --kube-context $ENVIRONMENT \
+ --set image.registry=$REGISTRY \
+ --set image.name=$PROJECT \
+ --set image.tag=$TAG-$ENVIRONMENT \
+ --wait -i -f k8s/values-$ENVIRONMENT.yaml $PROJECT k8s/
+
+ - name: Notify deploy
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ MSG_MINIMAL: true
+ SLACK_MESSAGE: "Successfully deployed ${{ env.PROJECT }} to ${{ inputs.environment }}! :gopher_party:"
+
+ - name: Notify if failure
+ if: ${{ failure() }}
+ uses: rtCamp/action-slack-notify@v2
+ env:
+ SLACK_COLOR: ${{ job.status }}
+ SLACK_MESSAGE: "Failed to deploy ${{ env.PROJECT }} to ${{ inputs.environment }}! :this-is-fine:"
diff --git a/src/components/CANSelfServe/SelfServe/__snapshots__/index.test.jsx.snap b/src/components/CANSelfServe/SelfServe/__snapshots__/index.test.jsx.snap
index 7c0453b..907fc20 100644
--- a/src/components/CANSelfServe/SelfServe/__snapshots__/index.test.jsx.snap
+++ b/src/components/CANSelfServe/SelfServe/__snapshots__/index.test.jsx.snap
@@ -338,58 +338,12 @@ exports[`Render Render 1`] = `
{
const classes = useStyles();
@@ -72,27 +73,19 @@ const MainForm = ({ id }) => {
setSelectedEndDate(value);
};
- const handleSelectedItemsChange = (event) => {
- const { value } = event.target;
- if (value.some(item => item === "Select All")) {
- setSelectAllCanSignals(true);
- if (selectedCanSignals.length === canSignals.length) {
- setSelectedCanSignals([]);
- } else {
- setSelectedCanSignals(canSignals.map(signal => signal.signal_name));
- }
- } else {
- setSelectAllCanSignals(false);
- setSelectedCanSignals(value);
- }
- };
-
const displayTimeAsGMT = (date) => {
return gmtTimezone
- ? date.toLocaleString("en-US", {timeZone: "Etc/GMT"})
+ ? date.toLocaleString("en-US", { timeZone: "Etc/GMT" })
: date;
}
+ useEffect(() => {
+ if (canSignals.length === selectedCanSignals.length) {
+ setSelectAllCanSignals(true);
+ } else {
+ setSelectAllCanSignals(false);
+ }
+ }, [canSignals, selectedCanSignals, setSelectAllCanSignals]);
return (
@@ -175,36 +168,12 @@ const MainForm = ({ id }) => {
-
- Select CAN signals
-
-
+ signal.signal_name))}
+ onChange={setSelectedCanSignals}
+ />