From d0d8a1c796cbcbdc844f26ac038aa11b724a9ec7 Mon Sep 17 00:00:00 2001 From: Mallesh Gugloth Date: Thu, 18 Jul 2024 09:23:37 +0000 Subject: [PATCH 1/2] VRT secretless FIC --- azure-pipelines.vrt-baseline.yml | 57 ++++++++++++++++--- azure-pipelines.vrt-pr.yml | 94 ++++++++++++++++++++++---------- download-vr-cli.yml | 2 +- 3 files changed, 114 insertions(+), 39 deletions(-) diff --git a/azure-pipelines.vrt-baseline.yml b/azure-pipelines.vrt-baseline.yml index 8ba195238009d1..c728aa88a920f9 100644 --- a/azure-pipelines.vrt-baseline.yml +++ b/azure-pipelines.vrt-baseline.yml @@ -29,15 +29,25 @@ jobs: vrTestPackageName: '@fluentui/vr-tests-web-components' vrTestPackagePath: 'apps/vr-tests-web-components' - - bash: vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'FluentUI-web-components' --locationPostfix 'vrscreenshotwebcomponents' --pipelineId $(pipelineId) + - task: AzureCLI@2 displayName: 'Run Screenshotdiff update baseline' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_API_URL: $(VR_APP_API_URL) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'FluentUI-web-components' --locationPostfix 'vrscreenshotwebcomponents' --pipelineId $(pipelineId) - job: VRToolUpdateBaseline_V9 variables: @@ -53,15 +63,25 @@ jobs: vrTestPackageName: '@fluentui/vr-tests-react-components' vrTestPackagePath: 'apps/vr-tests-react-components' - - bash: vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'fluentuiv9' --locationPostfix 'vrscreenshotv9' --pipelineId $(pipelineId) + - task: AzureCLI@2 displayName: 'Run Screenshotdiff update baseline' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_API_URL: $(VR_APP_API_URL) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'fluentuiv9' --locationPostfix 'vrscreenshotv9' --pipelineId $(pipelineId) - job: VRToolUpdateBaseline_V8 variables: @@ -77,16 +97,25 @@ jobs: vrTestPackageName: '@fluentui/vr-tests' vrTestPackagePath: 'apps/vr-tests' - - bash: vr-app run-diff --screenshotsDirectory ./screenshots --buildType release --clientType "FLUENTUI" --locationPrefix 'fluentuiv8' --locationPostfix 'vrscreenshotv8' --pipelineId $(pipelineId) + - task: AzureCLI@2 displayName: 'Run fluentui-screenshotdiff' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_API_URL: $(VR_APP_API_URL) - + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --screenshotsDirectory ./screenshots --buildType release --clientType "FLUENTUI" --locationPrefix 'fluentuiv8' --locationPostfix 'vrscreenshotv8' --pipelineId $(pipelineId) - job: VRToolUpdateBaseline_V0 variables: pipelineId: '313' @@ -101,12 +130,22 @@ jobs: vrTestPackageName: '@fluentui/docs' vrTestPackagePath: 'packages/fluentui/docs' - - bash: vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'FluentUI-v0' --locationPostfix 'vrscreenshotv0' --pipelineId $(pipelineId) + - task: AzureCLI@2 displayName: 'Run fluentui-screenshotdiff' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_API_URL: $(VR_APP_API_URL) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --buildType release --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --locationPrefix 'FluentUI-v0' --locationPostfix 'vrscreenshotv0' --pipelineId $(pipelineId) diff --git a/azure-pipelines.vrt-pr.yml b/azure-pipelines.vrt-pr.yml index 1ccbf978d174d1..248b44090aba49 100644 --- a/azure-pipelines.vrt-pr.yml +++ b/azure-pipelines.vrt-pr.yml @@ -30,10 +30,10 @@ jobs: - bash: | postPolicy="true"; - response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} --data-urlencode 'client_secret='${VR_APPROVAL_CLIENT_SECRET} ) + response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} ) parsedResponse=${response/*"access_token"/} token=${parsedResponse:3:${#parsedResponse}-5} - curl --location --request POST 'https://vrapprovalfunction-prod.azurewebsites.net/api/policyStateV2' \ + curl --location --request POST 'https://vrtfunctionappv0.azurewebsites.net/api/policyStateV2' \ --header 'Authorization: Bearer '"$token" \ --header 'Content-Type: application/json' \ --data-raw ' { @@ -56,7 +56,6 @@ jobs: }' displayName: 'Call policy State Api' env: - VR_APPROVAL_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APPROVAL_HOST: $(VR_APPROVAL_HOST) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_CLIENT_URL: $(VR_APP_CLIENT_URL) @@ -66,16 +65,26 @@ jobs: fluentVersion: webcomponents vrTestPackageName: '@fluentui/vr-tests-web-components' vrTestPackagePath: 'apps/vr-tests-web-components' - # ciDefinitionId is set to 205 because that is the ID of the baseline pipeline (https://uifabric.visualstudio.com/fabricpublic/_build?definitionId=205) used by the master branch - - bash: vr-app run-diff --screenshotsDirectory ./screenshots --buildType pr --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'FluentUI-web-components' --locationPostfix 'vrscreenshotwebcomponents' --pipelineId $(pipelineId) --clientName 'fluentui-web-components-v3' --threshold '0.04' --cumThreshold '1' - displayName: 'Run fluentui-screenshotdiff' + + - task: AzureCLI@2 + displayName: 'Run Snapshot Diffing' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) - VR_APP_API_URL: $(VR_APP_API_URL) + VR_APP_API_URL: $(VR_APP_API_URL_NEW) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --screenshotsDirectory ./screenshots --buildType pr --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'FluentUI-web-components' --locationPostfix 'vrscreenshotwebcomponents' --pipelineId $(pipelineId) --clientName 'fluentui-web-components-v3' --threshold '0.04' --cumThreshold '1' condition: eq(variables['vrTestSkip'], 'no') - job: VisualRegressionTest_V9 @@ -95,10 +104,10 @@ jobs: - bash: | postPolicy="true"; - response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} --data-urlencode 'client_secret='${VR_APPROVAL_CLIENT_SECRET} ) + response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} ) parsedResponse=${response/*"access_token"/} token=${parsedResponse:3:${#parsedResponse}-5} - curl --location --request POST 'https://vrapprovalfunction-prod.azurewebsites.net/api/policyStateV2' \ + curl --location --request POST 'https://vrtfunctionappv0.azurewebsites.net/api/policyStateV2' \ --header 'Authorization: Bearer '"$token" \ --header 'Content-Type: application/json' \ --data-raw ' { @@ -121,7 +130,6 @@ jobs: }' displayName: 'Call policy State Api' env: - VR_APPROVAL_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APPROVAL_HOST: $(VR_APPROVAL_HOST) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_CLIENT_URL: $(VR_APP_CLIENT_URL) @@ -132,15 +140,25 @@ jobs: vrTestPackageName: '@fluentui/vr-tests-react-components' vrTestPackagePath: 'apps/vr-tests-react-components' - - bash: vr-app run-diff --buildType pr --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'fluentuiv9' --locationPostfix 'vrscreenshotv9' --pipelineId $(pipelineId) --clientName 'fluentuiv9' --threshold '0.04' --cumThreshold '1' - displayName: 'Run fluentui-screenshotdiff' + - task: AzureCLI@2 + displayName: 'Run Snapshot Diffing' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) - VR_APP_API_URL: $(VR_APP_API_URL) + VR_APP_API_URL: $(VR_APP_API_URL_NEW) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --buildType pr --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'fluentuiv9' --locationPostfix 'vrscreenshotv9' --pipelineId $(pipelineId) --clientName 'fluentuiv9' --threshold '0.04' --cumThreshold '1' condition: eq(variables['vrTestSkip'], 'no') - job: VisualRegressionTest_V8 @@ -159,10 +177,10 @@ jobs: - bash: | postPolicy="true"; - response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} --data-urlencode 'client_secret='${VR_APPROVAL_CLIENT_SECRET} ) + response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} ) parsedResponse=${response/*"access_token"/} token=${parsedResponse:3:${#parsedResponse}-5} - curl --location --request POST 'https://vrapprovalfunction-prod.azurewebsites.net/api/policyStateV2' \ + curl --location --request POST 'https://vrtfunctionappv0.azurewebsites.net/api/policyStateV2' \ --header 'Authorization: Bearer '"$token" \ --header 'Content-Type: application/json' \ --data-raw ' { @@ -185,7 +203,6 @@ jobs: }' displayName: 'Call policy State Api' env: - VR_APPROVAL_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APPROVAL_HOST: $(VR_APPROVAL_HOST) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_CLIENT_URL: $(VR_APP_CLIENT_URL) @@ -196,15 +213,25 @@ jobs: vrTestPackageName: '@fluentui/vr-tests' vrTestPackagePath: 'apps/vr-tests' - - bash: vr-app run-diff --screenshotsDirectory ./screenshots --buildType pr --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'fluentuiv8' --locationPostfix 'vrscreenshotv8' --pipelineId $(pipelineId) --clientName 'fluentuiv8' --threshold '0.04' --cumThreshold '1' - displayName: 'Run fluentui-screenshotdiff' + - task: AzureCLI@2 + displayName: 'Run Snapshot Diffing' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) - VR_APP_API_URL: $(VR_APP_API_URL) + VR_APP_API_URL: $(VR_APP_API_URL_NEW) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --screenshotsDirectory ./screenshots --buildType pr --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'fluentuiv8' --locationPostfix 'vrscreenshotv8' --pipelineId $(pipelineId) --clientName 'fluentuiv8' --threshold '0.04' --cumThreshold '1' condition: eq(variables['vrTestSkip'], 'no') - job: VisualRegressionTest_V0 @@ -224,10 +251,10 @@ jobs: - bash: | postPolicy="true"; - response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} --data-urlencode 'client_secret='${VR_APPROVAL_CLIENT_SECRET} ) + response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} ) parsedResponse=${response/*"access_token"/} token=${parsedResponse:3:${#parsedResponse}-5} - curl --location --request POST 'https://vrapprovalfunction-prod.azurewebsites.net/api/policyStateV2' \ + curl --location --request POST 'https://vrtfunctionappv0.azurewebsites.net/api/policyStateV2' \ --header 'Authorization: Bearer '"$token" \ --header 'Content-Type: application/json' \ --data-raw ' { @@ -250,7 +277,6 @@ jobs: }' displayName: 'Call policy State Api' env: - VR_APPROVAL_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) VR_APP_CLIENT_URL: $(VR_APP_CLIENT_URL) @@ -260,13 +286,23 @@ jobs: vrTestPackageName: '@fluentui/docs' vrTestPackagePath: 'packages/fluentui/docs' - - bash: vr-app run-diff --buildType pr --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'FluentUI-v0' --locationPostfix 'vrscreenshotv0' --pipelineId $(pipelineId) --clientName 'FluentUIV0' --threshold '0.04' --cumThreshold '1' - displayName: 'Run fluentui-screenshotdiff' + - task: AzureCLI@2 + displayName: 'Run Snapshot Diffing' env: API_TOKEN: $(fabric-public-pipeline-access-PAT) GITHUB_API_TOKEN: $(githubRepoStatusPAT) STORAGE_CONNECTION_STRING: $(BLOB-CONNECTION-STRING) - VR_APP_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) - VR_APP_API_URL: $(VR_APP_API_URL) + VR_APP_API_URL: $(VR_APP_API_URL_NEW) + STORAGE_ACCOUNT_ID: $(StorageAccountId) + TENANT_ID: $(TenantId) + PRINCIPAL_CLIENT_ID: $(PrincipalClientId) + SERVICE_CONNECTION_ID: $(ServiceConnectionId) + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + azureSubscription: $(AzureSubscription) + scriptType: bash + scriptLocation: 'inlineScript' + inlineScript: | + vr-app run-diff --buildType pr --screenshotsDirectory ./screenshots --clientType "FLUENTUI" --ciDefinitionId 205 --groupName $(pipelineName) --locationPrefix 'FluentUI-v0' --locationPostfix 'vrscreenshotv0' --pipelineId $(pipelineId) --clientName 'FluentUIV0' --threshold '0.04' --cumThreshold '1' condition: eq(variables['vrTestSkip'], 'no') diff --git a/download-vr-cli.yml b/download-vr-cli.yml index 5a679dbc0b9d01..25edd7043ed40b 100644 --- a/download-vr-cli.yml +++ b/download-vr-cli.yml @@ -1,6 +1,6 @@ steps: - bash: | set -exuo pipefail - npm install -g vr-approval-cli@0.0.168 + npm install -g vr-approval-cli@0.4.3 displayName: Download VR App CLI retryCountOnTaskFailure: 3 From e4971e6d1f9af0dbe1b7ba805db0f312284f4d1b Mon Sep 17 00:00:00 2001 From: Mallesh Gugloth Date: Fri, 19 Jul 2024 09:53:47 +0000 Subject: [PATCH 2/2] storage account secret less for VRT access --- azure-pipelines.vrt-pr.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/azure-pipelines.vrt-pr.yml b/azure-pipelines.vrt-pr.yml index 248b44090aba49..53c9a470b03e4c 100644 --- a/azure-pipelines.vrt-pr.yml +++ b/azure-pipelines.vrt-pr.yml @@ -251,7 +251,7 @@ jobs: - bash: | postPolicy="true"; - response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} ) + response=$(curl --request POST ${VR_APP_CLIENT_URL} --header 'Content-Type: application/x-www-form-urlencoded' --data-urlencode 'grant_type=client_credentials' --data-urlencode 'client_id='${VR_APP_CLIENT_ID} --data-urlencode 'client_secret='${VR_APPROVAL_CLIENT_SECRET}) parsedResponse=${response/*"access_token"/} token=${parsedResponse:3:${#parsedResponse}-5} curl --location --request POST 'https://vrtfunctionappv0.azurewebsites.net/api/policyStateV2' \ @@ -278,6 +278,7 @@ jobs: displayName: 'Call policy State Api' env: VR_APP_CLIENT_ID: $(VR_APP_CLIENT_ID) + VR_APPROVAL_CLIENT_SECRET: $(VR-APPROVAL-CLIENT-SECRET) VR_APP_CLIENT_URL: $(VR_APP_CLIENT_URL) - template: .devops/templates/runpublishvrscreenshot.yml