From f198d50b62a2df6062652e4815cbb82beab79f8f Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 31 Aug 2024 22:06:44 +0900 Subject: [PATCH 01/17] =?UTF-8?q?add=20:=20storage=20account=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20bicep?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/storage-account.bicep | 101 ++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 infra/storage-account.bicep diff --git a/infra/storage-account.bicep b/infra/storage-account.bicep new file mode 100644 index 00000000..fbeceb82 --- /dev/null +++ b/infra/storage-account.bicep @@ -0,0 +1,101 @@ +metadata description = 'Creates an Azure storage account.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@allowed([ + 'Cool' + 'Hot' + 'Premium' ]) +param accessTier string = 'Hot' +param allowBlobPublicAccess bool = true +param allowCrossTenantReplication bool = true +param allowSharedKeyAccess bool = true +param containers array = [] +param corsRules array = [] +param defaultToOAuthAuthentication bool = false +param deleteRetentionPolicy object = {} +@allowed([ 'AzureDnsZone', 'Standard' ]) +param dnsEndpointType string = 'Standard' +param files array = [] +param kind string = 'StorageV2' +param minimumTlsVersion string = 'TLS1_2' +param queues array = [] +param shareDeleteRetentionPolicy object = {} +param supportsHttpsTrafficOnly bool = true +param tables array = [] +param networkAcls object = { + bypass: 'AzureServices' + defaultAction: 'Allow' +} +@allowed([ 'Enabled', 'Disabled' ]) +param publicNetworkAccess string = 'Enabled' +param sku object = { name: 'Standard_LRS' } + +resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { + name: name + location: location + tags: tags + kind: kind + sku: sku + properties: { + accessTier: accessTier + allowBlobPublicAccess: allowBlobPublicAccess + allowCrossTenantReplication: allowCrossTenantReplication + allowSharedKeyAccess: allowSharedKeyAccess + defaultToOAuthAuthentication: defaultToOAuthAuthentication + dnsEndpointType: dnsEndpointType + minimumTlsVersion: minimumTlsVersion + networkAcls: networkAcls + publicNetworkAccess: publicNetworkAccess + supportsHttpsTrafficOnly: supportsHttpsTrafficOnly + } + + resource blobServices 'blobServices' = if (!empty(containers)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + deleteRetentionPolicy: deleteRetentionPolicy + } + resource container 'containers' = [for container in containers: { + name: container.name + properties: { + publicAccess: container.?publicAccess ?? 'None' + } + }] + } + + resource fileServices 'fileServices' = if (!empty(files)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + shareDeleteRetentionPolicy: shareDeleteRetentionPolicy + } + } + + resource queueServices 'queueServices' = if (!empty(queues)) { + name: 'default' + properties: { + + } + resource queue 'queues' = [for queue in queues: { + name: queue.name + properties: { + metadata: {} + } + }] + } + + resource tableServices 'tableServices' = if (!empty(tables)) { + name: 'default' + properties: {} + } +} + +output id string = storage.id +output name string = storage.name +output primaryEndpoints object = storage.properties.primaryEndpoints From 0d5b7a83d701b794e093772ce59455b7950649aa Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 31 Aug 2024 22:41:52 +0900 Subject: [PATCH 02/17] =?UTF-8?q?update=20:=20bicep=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=EB=AA=A9=EB=A1=9D=20=EC=A0=95?= =?UTF-8?q?=EC=9D=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/storage-account.bicep | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/infra/storage-account.bicep b/infra/storage-account.bicep index fbeceb82..4847eb23 100644 --- a/infra/storage-account.bicep +++ b/infra/storage-account.bicep @@ -23,7 +23,14 @@ param minimumTlsVersion string = 'TLS1_2' param queues array = [] param shareDeleteRetentionPolicy object = {} param supportsHttpsTrafficOnly bool = true -param tables array = [] + +// tables list +param tables array = [ + { + name: 'events' + } +] + param networkAcls object = { bypass: 'AzureServices' defaultAction: 'Allow' @@ -93,6 +100,10 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { resource tableServices 'tableServices' = if (!empty(tables)) { name: 'default' properties: {} + resource table 'tables' = [for table in tables: { + name: table.name + properties: {} + }] } } From 7e388486029ba00d86238ba68baf376b7c3552cb Mon Sep 17 00:00:00 2001 From: tae0y Date: Sun, 1 Sep 2024 17:30:47 +0900 Subject: [PATCH 03/17] =?UTF-8?q?update=20:=20storage=20account=20?= =?UTF-8?q?=EA=B3=A0=EC=9C=A0=ED=95=9C=20=EC=9D=B4=EB=A6=84=20=EB=B6=80?= =?UTF-8?q?=EC=97=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/abbreviations.json | 275 ++++++++++++++++++------------------ infra/storage-account.bicep | 7 +- 2 files changed, 143 insertions(+), 139 deletions(-) diff --git a/infra/abbreviations.json b/infra/abbreviations.json index 492e8315..045a3899 100644 --- a/infra/abbreviations.json +++ b/infra/abbreviations.json @@ -1,137 +1,138 @@ -{ - "analysisServicesServers": "as", - "apiManagementService": "apim-", - "appConfigurationStores": "appcs-", - "appManagedEnvironments": "cae-", - "appContainerApps": "ca-", - "authorizationPolicyDefinitions": "policy-", - "automationAutomationAccounts": "aa-", - "blueprintBlueprints": "bp-", - "blueprintBlueprintsArtifacts": "bpa-", - "cacheRedis": "redis-", - "cdnProfiles": "cdnp-", - "cdnProfilesEndpoints": "cdne-", - "cognitiveServicesAccounts": "cog-", - "cognitiveServicesFormRecognizer": "cog-fr-", - "cognitiveServicesTextAnalytics": "cog-ta-", - "cognitiveServicesSpeech": "cog-sp-", - "computeAvailabilitySets": "avail-", - "computeCloudServices": "cld-", - "computeDiskEncryptionSets": "des", - "computeDisks": "disk", - "computeDisksOs": "osdisk", - "computeGalleries": "gal", - "computeSnapshots": "snap-", - "computeVirtualMachines": "vm", - "computeVirtualMachineScaleSets": "vmss-", - "containerInstanceContainerGroups": "ci", - "containerRegistryRegistries": "cr", - "containerServiceManagedClusters": "aks-", - "databricksWorkspaces": "dbw-", - "dataFactoryFactories": "adf-", - "dataLakeAnalyticsAccounts": "dla", - "dataLakeStoreAccounts": "dls", - "dataMigrationServices": "dms-", - "dBforMySQLServers": "mysql-", - "dBforPostgreSQLServers": "psql-", - "devicesIotHubs": "iot-", - "devicesProvisioningServices": "provs-", - "devicesProvisioningServicesCertificates": "pcert-", - "documentDBDatabaseAccounts": "cosmos-", - "eventGridDomains": "evgd-", - "eventGridDomainsTopics": "evgt-", - "eventGridEventSubscriptions": "evgs-", - "eventHubNamespaces": "evhns-", - "eventHubNamespacesEventHubs": "evh-", - "hdInsightClustersHadoop": "hadoop-", - "hdInsightClustersHbase": "hbase-", - "hdInsightClustersKafka": "kafka-", - "hdInsightClustersMl": "mls-", - "hdInsightClustersSpark": "spark-", - "hdInsightClustersStorm": "storm-", - "hybridComputeMachines": "arcs-", - "insightsActionGroups": "ag-", - "insightsComponents": "appi-", - "keyVaultVaults": "kv-", - "kubernetesConnectedClusters": "arck", - "kustoClusters": "dec", - "kustoClustersDatabases": "dedb", - "loadTesting": "lt-", - "logicIntegrationAccounts": "ia-", - "logicWorkflows": "logic-", - "machineLearningServicesWorkspaces": "mlw-", - "managedIdentityUserAssignedIdentities": "id-", - "managementManagementGroups": "mg-", - "migrateAssessmentProjects": "migr-", - "networkApplicationGateways": "agw-", - "networkApplicationSecurityGroups": "asg-", - "networkAzureFirewalls": "afw-", - "networkBastionHosts": "bas-", - "networkConnections": "con-", - "networkDnsZones": "dnsz-", - "networkExpressRouteCircuits": "erc-", - "networkFirewallPolicies": "afwp-", - "networkFirewallPoliciesWebApplication": "waf", - "networkFirewallPoliciesRuleGroups": "wafrg", - "networkFrontDoors": "fd-", - "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-", - "networkLoadBalancersExternal": "lbe-", - "networkLoadBalancersInternal": "lbi-", - "networkLoadBalancersInboundNatRules": "rule-", - "networkLocalNetworkGateways": "lgw-", - "networkNatGateways": "ng-", - "networkNetworkInterfaces": "nic-", - "networkNetworkSecurityGroups": "nsg-", - "networkNetworkSecurityGroupsSecurityRules": "nsgsr-", - "networkNetworkWatchers": "nw-", - "networkPrivateDnsZones": "pdnsz-", - "networkPrivateLinkServices": "pl-", - "networkPublicIPAddresses": "pip-", - "networkPublicIPPrefixes": "ippre-", - "networkRouteFilters": "rf-", - "networkRouteTables": "rt-", - "networkRouteTablesRoutes": "udr-", - "networkTrafficManagerProfiles": "traf-", - "networkVirtualNetworkGateways": "vgw-", - "networkVirtualNetworks": "vnet-", - "networkVirtualNetworksSubnets": "snet-", - "networkVirtualNetworksVirtualNetworkPeerings": "peer-", - "networkVirtualWans": "vwan-", - "networkVpnGateways": "vpng-", - "networkVpnGatewaysVpnConnections": "vcn-", - "networkVpnGatewaysVpnSites": "vst-", - "notificationHubsNamespaces": "ntfns-", - "notificationHubsNamespacesNotificationHubs": "ntf-", - "operationalInsightsWorkspaces": "log-", - "portalDashboards": "dash-", - "powerBIDedicatedCapacities": "pbi-", - "purviewAccounts": "pview-", - "recoveryServicesVaults": "rsv-", - "resourcesResourceGroups": "rg-", - "searchSearchServices": "srch-", - "serviceBusNamespaces": "sb-", - "serviceBusNamespacesQueues": "sbq-", - "serviceBusNamespacesTopics": "sbt-", - "serviceEndPointPolicies": "se-", - "serviceFabricClusters": "sf-", - "signalRServiceSignalR": "sigr", - "sqlManagedInstances": "sqlmi-", - "sqlServers": "sql-", - "sqlServersDataWarehouse": "sqldw-", - "sqlServersDatabases": "sqldb-", - "sqlServersDatabasesStretch": "sqlstrdb-", - "storageStorageAccounts": "st", - "storageStorageAccountsVm": "stvm", - "storSimpleManagers": "ssimp", - "streamAnalyticsCluster": "asa-", - "synapseWorkspaces": "syn", - "synapseWorkspacesAnalyticsWorkspaces": "synw", - "synapseWorkspacesSqlPoolsDedicated": "syndp", - "synapseWorkspacesSqlPoolsSpark": "synsp", - "timeSeriesInsightsEnvironments": "tsi-", - "webServerFarms": "plan-", - "webSitesAppService": "app-", - "webSitesAppServiceEnvironment": "ase-", - "webSitesFunctions": "func-", - "webStaticSites": "stapp-" -} +{ + "analysisServicesServers": "as", + "apiManagementService": "apim-", + "appConfigurationStores": "appcs-", + "appManagedEnvironments": "cae-", + "appContainerApps": "ca-", + "authorizationPolicyDefinitions": "policy-", + "automationAutomationAccounts": "aa-", + "blueprintBlueprints": "bp-", + "blueprintBlueprintsArtifacts": "bpa-", + "cacheRedis": "redis-", + "cdnProfiles": "cdnp-", + "cdnProfilesEndpoints": "cdne-", + "cognitiveServicesAccounts": "cog-", + "cognitiveServicesFormRecognizer": "cog-fr-", + "cognitiveServicesTextAnalytics": "cog-ta-", + "cognitiveServicesSpeech": "cog-sp-", + "computeAvailabilitySets": "avail-", + "computeCloudServices": "cld-", + "computeDiskEncryptionSets": "des", + "computeDisks": "disk", + "computeDisksOs": "osdisk", + "computeGalleries": "gal", + "computeSnapshots": "snap-", + "computeVirtualMachines": "vm", + "computeVirtualMachineScaleSets": "vmss-", + "containerInstanceContainerGroups": "ci", + "containerRegistryRegistries": "cr", + "containerServiceManagedClusters": "aks-", + "databricksWorkspaces": "dbw-", + "dataFactoryFactories": "adf-", + "dataLakeAnalyticsAccounts": "dla", + "dataLakeStoreAccounts": "dls", + "dataMigrationServices": "dms-", + "dBforMySQLServers": "mysql-", + "dBforPostgreSQLServers": "psql-", + "devicesIotHubs": "iot-", + "devicesProvisioningServices": "provs-", + "devicesProvisioningServicesCertificates": "pcert-", + "documentDBDatabaseAccounts": "cosmos-", + "eventGridDomains": "evgd-", + "eventGridDomainsTopics": "evgt-", + "eventGridEventSubscriptions": "evgs-", + "eventHubNamespaces": "evhns-", + "eventHubNamespacesEventHubs": "evh-", + "hdInsightClustersHadoop": "hadoop-", + "hdInsightClustersHbase": "hbase-", + "hdInsightClustersKafka": "kafka-", + "hdInsightClustersMl": "mls-", + "hdInsightClustersSpark": "spark-", + "hdInsightClustersStorm": "storm-", + "hybridComputeMachines": "arcs-", + "insightsActionGroups": "ag-", + "insightsComponents": "appi-", + "keyVaultVaults": "kv-", + "kubernetesConnectedClusters": "arck", + "kustoClusters": "dec", + "kustoClustersDatabases": "dedb", + "loadTesting": "lt-", + "logicIntegrationAccounts": "ia-", + "logicWorkflows": "logic-", + "machineLearningServicesWorkspaces": "mlw-", + "managedIdentityUserAssignedIdentities": "id-", + "managementManagementGroups": "mg-", + "migrateAssessmentProjects": "migr-", + "networkApplicationGateways": "agw-", + "networkApplicationSecurityGroups": "asg-", + "networkAzureFirewalls": "afw-", + "networkBastionHosts": "bas-", + "networkConnections": "con-", + "networkDnsZones": "dnsz-", + "networkExpressRouteCircuits": "erc-", + "networkFirewallPolicies": "afwp-", + "networkFirewallPoliciesWebApplication": "waf", + "networkFirewallPoliciesRuleGroups": "wafrg", + "networkFrontDoors": "fd-", + "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-", + "networkLoadBalancersExternal": "lbe-", + "networkLoadBalancersInternal": "lbi-", + "networkLoadBalancersInboundNatRules": "rule-", + "networkLocalNetworkGateways": "lgw-", + "networkNatGateways": "ng-", + "networkNetworkInterfaces": "nic-", + "networkNetworkSecurityGroups": "nsg-", + "networkNetworkSecurityGroupsSecurityRules": "nsgsr-", + "networkNetworkWatchers": "nw-", + "networkPrivateDnsZones": "pdnsz-", + "networkPrivateLinkServices": "pl-", + "networkPublicIPAddresses": "pip-", + "networkPublicIPPrefixes": "ippre-", + "networkRouteFilters": "rf-", + "networkRouteTables": "rt-", + "networkRouteTablesRoutes": "udr-", + "networkTrafficManagerProfiles": "traf-", + "networkVirtualNetworkGateways": "vgw-", + "networkVirtualNetworks": "vnet-", + "networkVirtualNetworksSubnets": "snet-", + "networkVirtualNetworksVirtualNetworkPeerings": "peer-", + "networkVirtualWans": "vwan-", + "networkVpnGateways": "vpng-", + "networkVpnGatewaysVpnConnections": "vcn-", + "networkVpnGatewaysVpnSites": "vst-", + "notificationHubsNamespaces": "ntfns-", + "notificationHubsNamespacesNotificationHubs": "ntf-", + "operationalInsightsWorkspaces": "log-", + "portalDashboards": "dash-", + "powerBIDedicatedCapacities": "pbi-", + "purviewAccounts": "pview-", + "recoveryServicesVaults": "rsv-", + "resourcesResourceGroups": "rg-", + "searchSearchServices": "srch-", + "serviceBusNamespaces": "sb-", + "serviceBusNamespacesQueues": "sbq-", + "serviceBusNamespacesTopics": "sbt-", + "serviceEndPointPolicies": "se-", + "serviceFabricClusters": "sf-", + "signalRServiceSignalR": "sigr", + "sqlManagedInstances": "sqlmi-", + "sqlServers": "sql-", + "sqlServersDataWarehouse": "sqldw-", + "sqlServersDatabases": "sqldb-", + "sqlServersDatabasesStretch": "sqlstrdb-", + "storageStorageAccounts": "st", + "storageStorageAccountsVm": "stvm", + "storSimpleManagers": "ssimp", + "streamAnalyticsCluster": "asa-", + "synapseWorkspaces": "syn", + "synapseWorkspacesAnalyticsWorkspaces": "synw", + "synapseWorkspacesSqlPoolsDedicated": "syndp", + "synapseWorkspacesSqlPoolsSpark": "synsp", + "timeSeriesInsightsEnvironments": "tsi-", + "webServerFarms": "plan-", + "webSitesAppService": "app-", + "webSitesAppServiceEnvironment": "ase-", + "webSitesFunctions": "func-", + "webStaticSites": "stapp-", + "storageAccounts": "st" +} diff --git a/infra/storage-account.bicep b/infra/storage-account.bicep index 4847eb23..9e46a92a 100644 --- a/infra/storage-account.bicep +++ b/infra/storage-account.bicep @@ -1,5 +1,5 @@ metadata description = 'Creates an Azure storage account.' -param name string +param storageName string = '' param location string = resourceGroup().location param tags object = {} @@ -39,8 +39,11 @@ param networkAcls object = { param publicNetworkAccess string = 'Enabled' param sku object = { name: 'Standard_LRS' } +var abbrs = loadJsonContent('./abbreviations.json') +var resourceToken = uniqueString(resourceGroup().id) + resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { - name: name + name : !empty(storageName) ? storageName : '${abbrs.storageAccounts}${resourceToken}' location: location tags: tags kind: kind From bb711e546efbf3d02d5f4c45a698cd12822a4394 Mon Sep 17 00:00:00 2001 From: tae0y Date: Tue, 3 Sep 2024 23:37:34 +0900 Subject: [PATCH 04/17] =?UTF-8?q?update=20:=20bicep=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD,=20=EB=B6=88=ED=95=84?= =?UTF-8?q?=EC=9A=94=20=EB=B3=80=EA=B2=BD=20=EC=9B=90=EB=B3=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/abbreviations.json | 275 +++++++++--------- infra/aspire.bicep | 19 ++ .../{ => core/storage}/storage-account.bicep | 216 +++++++------- 3 files changed, 257 insertions(+), 253 deletions(-) rename infra/{ => core/storage}/storage-account.bicep (82%) diff --git a/infra/abbreviations.json b/infra/abbreviations.json index 045a3899..492e8315 100644 --- a/infra/abbreviations.json +++ b/infra/abbreviations.json @@ -1,138 +1,137 @@ -{ - "analysisServicesServers": "as", - "apiManagementService": "apim-", - "appConfigurationStores": "appcs-", - "appManagedEnvironments": "cae-", - "appContainerApps": "ca-", - "authorizationPolicyDefinitions": "policy-", - "automationAutomationAccounts": "aa-", - "blueprintBlueprints": "bp-", - "blueprintBlueprintsArtifacts": "bpa-", - "cacheRedis": "redis-", - "cdnProfiles": "cdnp-", - "cdnProfilesEndpoints": "cdne-", - "cognitiveServicesAccounts": "cog-", - "cognitiveServicesFormRecognizer": "cog-fr-", - "cognitiveServicesTextAnalytics": "cog-ta-", - "cognitiveServicesSpeech": "cog-sp-", - "computeAvailabilitySets": "avail-", - "computeCloudServices": "cld-", - "computeDiskEncryptionSets": "des", - "computeDisks": "disk", - "computeDisksOs": "osdisk", - "computeGalleries": "gal", - "computeSnapshots": "snap-", - "computeVirtualMachines": "vm", - "computeVirtualMachineScaleSets": "vmss-", - "containerInstanceContainerGroups": "ci", - "containerRegistryRegistries": "cr", - "containerServiceManagedClusters": "aks-", - "databricksWorkspaces": "dbw-", - "dataFactoryFactories": "adf-", - "dataLakeAnalyticsAccounts": "dla", - "dataLakeStoreAccounts": "dls", - "dataMigrationServices": "dms-", - "dBforMySQLServers": "mysql-", - "dBforPostgreSQLServers": "psql-", - "devicesIotHubs": "iot-", - "devicesProvisioningServices": "provs-", - "devicesProvisioningServicesCertificates": "pcert-", - "documentDBDatabaseAccounts": "cosmos-", - "eventGridDomains": "evgd-", - "eventGridDomainsTopics": "evgt-", - "eventGridEventSubscriptions": "evgs-", - "eventHubNamespaces": "evhns-", - "eventHubNamespacesEventHubs": "evh-", - "hdInsightClustersHadoop": "hadoop-", - "hdInsightClustersHbase": "hbase-", - "hdInsightClustersKafka": "kafka-", - "hdInsightClustersMl": "mls-", - "hdInsightClustersSpark": "spark-", - "hdInsightClustersStorm": "storm-", - "hybridComputeMachines": "arcs-", - "insightsActionGroups": "ag-", - "insightsComponents": "appi-", - "keyVaultVaults": "kv-", - "kubernetesConnectedClusters": "arck", - "kustoClusters": "dec", - "kustoClustersDatabases": "dedb", - "loadTesting": "lt-", - "logicIntegrationAccounts": "ia-", - "logicWorkflows": "logic-", - "machineLearningServicesWorkspaces": "mlw-", - "managedIdentityUserAssignedIdentities": "id-", - "managementManagementGroups": "mg-", - "migrateAssessmentProjects": "migr-", - "networkApplicationGateways": "agw-", - "networkApplicationSecurityGroups": "asg-", - "networkAzureFirewalls": "afw-", - "networkBastionHosts": "bas-", - "networkConnections": "con-", - "networkDnsZones": "dnsz-", - "networkExpressRouteCircuits": "erc-", - "networkFirewallPolicies": "afwp-", - "networkFirewallPoliciesWebApplication": "waf", - "networkFirewallPoliciesRuleGroups": "wafrg", - "networkFrontDoors": "fd-", - "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-", - "networkLoadBalancersExternal": "lbe-", - "networkLoadBalancersInternal": "lbi-", - "networkLoadBalancersInboundNatRules": "rule-", - "networkLocalNetworkGateways": "lgw-", - "networkNatGateways": "ng-", - "networkNetworkInterfaces": "nic-", - "networkNetworkSecurityGroups": "nsg-", - "networkNetworkSecurityGroupsSecurityRules": "nsgsr-", - "networkNetworkWatchers": "nw-", - "networkPrivateDnsZones": "pdnsz-", - "networkPrivateLinkServices": "pl-", - "networkPublicIPAddresses": "pip-", - "networkPublicIPPrefixes": "ippre-", - "networkRouteFilters": "rf-", - "networkRouteTables": "rt-", - "networkRouteTablesRoutes": "udr-", - "networkTrafficManagerProfiles": "traf-", - "networkVirtualNetworkGateways": "vgw-", - "networkVirtualNetworks": "vnet-", - "networkVirtualNetworksSubnets": "snet-", - "networkVirtualNetworksVirtualNetworkPeerings": "peer-", - "networkVirtualWans": "vwan-", - "networkVpnGateways": "vpng-", - "networkVpnGatewaysVpnConnections": "vcn-", - "networkVpnGatewaysVpnSites": "vst-", - "notificationHubsNamespaces": "ntfns-", - "notificationHubsNamespacesNotificationHubs": "ntf-", - "operationalInsightsWorkspaces": "log-", - "portalDashboards": "dash-", - "powerBIDedicatedCapacities": "pbi-", - "purviewAccounts": "pview-", - "recoveryServicesVaults": "rsv-", - "resourcesResourceGroups": "rg-", - "searchSearchServices": "srch-", - "serviceBusNamespaces": "sb-", - "serviceBusNamespacesQueues": "sbq-", - "serviceBusNamespacesTopics": "sbt-", - "serviceEndPointPolicies": "se-", - "serviceFabricClusters": "sf-", - "signalRServiceSignalR": "sigr", - "sqlManagedInstances": "sqlmi-", - "sqlServers": "sql-", - "sqlServersDataWarehouse": "sqldw-", - "sqlServersDatabases": "sqldb-", - "sqlServersDatabasesStretch": "sqlstrdb-", - "storageStorageAccounts": "st", - "storageStorageAccountsVm": "stvm", - "storSimpleManagers": "ssimp", - "streamAnalyticsCluster": "asa-", - "synapseWorkspaces": "syn", - "synapseWorkspacesAnalyticsWorkspaces": "synw", - "synapseWorkspacesSqlPoolsDedicated": "syndp", - "synapseWorkspacesSqlPoolsSpark": "synsp", - "timeSeriesInsightsEnvironments": "tsi-", - "webServerFarms": "plan-", - "webSitesAppService": "app-", - "webSitesAppServiceEnvironment": "ase-", - "webSitesFunctions": "func-", - "webStaticSites": "stapp-", - "storageAccounts": "st" -} +{ + "analysisServicesServers": "as", + "apiManagementService": "apim-", + "appConfigurationStores": "appcs-", + "appManagedEnvironments": "cae-", + "appContainerApps": "ca-", + "authorizationPolicyDefinitions": "policy-", + "automationAutomationAccounts": "aa-", + "blueprintBlueprints": "bp-", + "blueprintBlueprintsArtifacts": "bpa-", + "cacheRedis": "redis-", + "cdnProfiles": "cdnp-", + "cdnProfilesEndpoints": "cdne-", + "cognitiveServicesAccounts": "cog-", + "cognitiveServicesFormRecognizer": "cog-fr-", + "cognitiveServicesTextAnalytics": "cog-ta-", + "cognitiveServicesSpeech": "cog-sp-", + "computeAvailabilitySets": "avail-", + "computeCloudServices": "cld-", + "computeDiskEncryptionSets": "des", + "computeDisks": "disk", + "computeDisksOs": "osdisk", + "computeGalleries": "gal", + "computeSnapshots": "snap-", + "computeVirtualMachines": "vm", + "computeVirtualMachineScaleSets": "vmss-", + "containerInstanceContainerGroups": "ci", + "containerRegistryRegistries": "cr", + "containerServiceManagedClusters": "aks-", + "databricksWorkspaces": "dbw-", + "dataFactoryFactories": "adf-", + "dataLakeAnalyticsAccounts": "dla", + "dataLakeStoreAccounts": "dls", + "dataMigrationServices": "dms-", + "dBforMySQLServers": "mysql-", + "dBforPostgreSQLServers": "psql-", + "devicesIotHubs": "iot-", + "devicesProvisioningServices": "provs-", + "devicesProvisioningServicesCertificates": "pcert-", + "documentDBDatabaseAccounts": "cosmos-", + "eventGridDomains": "evgd-", + "eventGridDomainsTopics": "evgt-", + "eventGridEventSubscriptions": "evgs-", + "eventHubNamespaces": "evhns-", + "eventHubNamespacesEventHubs": "evh-", + "hdInsightClustersHadoop": "hadoop-", + "hdInsightClustersHbase": "hbase-", + "hdInsightClustersKafka": "kafka-", + "hdInsightClustersMl": "mls-", + "hdInsightClustersSpark": "spark-", + "hdInsightClustersStorm": "storm-", + "hybridComputeMachines": "arcs-", + "insightsActionGroups": "ag-", + "insightsComponents": "appi-", + "keyVaultVaults": "kv-", + "kubernetesConnectedClusters": "arck", + "kustoClusters": "dec", + "kustoClustersDatabases": "dedb", + "loadTesting": "lt-", + "logicIntegrationAccounts": "ia-", + "logicWorkflows": "logic-", + "machineLearningServicesWorkspaces": "mlw-", + "managedIdentityUserAssignedIdentities": "id-", + "managementManagementGroups": "mg-", + "migrateAssessmentProjects": "migr-", + "networkApplicationGateways": "agw-", + "networkApplicationSecurityGroups": "asg-", + "networkAzureFirewalls": "afw-", + "networkBastionHosts": "bas-", + "networkConnections": "con-", + "networkDnsZones": "dnsz-", + "networkExpressRouteCircuits": "erc-", + "networkFirewallPolicies": "afwp-", + "networkFirewallPoliciesWebApplication": "waf", + "networkFirewallPoliciesRuleGroups": "wafrg", + "networkFrontDoors": "fd-", + "networkFrontdoorWebApplicationFirewallPolicies": "fdfp-", + "networkLoadBalancersExternal": "lbe-", + "networkLoadBalancersInternal": "lbi-", + "networkLoadBalancersInboundNatRules": "rule-", + "networkLocalNetworkGateways": "lgw-", + "networkNatGateways": "ng-", + "networkNetworkInterfaces": "nic-", + "networkNetworkSecurityGroups": "nsg-", + "networkNetworkSecurityGroupsSecurityRules": "nsgsr-", + "networkNetworkWatchers": "nw-", + "networkPrivateDnsZones": "pdnsz-", + "networkPrivateLinkServices": "pl-", + "networkPublicIPAddresses": "pip-", + "networkPublicIPPrefixes": "ippre-", + "networkRouteFilters": "rf-", + "networkRouteTables": "rt-", + "networkRouteTablesRoutes": "udr-", + "networkTrafficManagerProfiles": "traf-", + "networkVirtualNetworkGateways": "vgw-", + "networkVirtualNetworks": "vnet-", + "networkVirtualNetworksSubnets": "snet-", + "networkVirtualNetworksVirtualNetworkPeerings": "peer-", + "networkVirtualWans": "vwan-", + "networkVpnGateways": "vpng-", + "networkVpnGatewaysVpnConnections": "vcn-", + "networkVpnGatewaysVpnSites": "vst-", + "notificationHubsNamespaces": "ntfns-", + "notificationHubsNamespacesNotificationHubs": "ntf-", + "operationalInsightsWorkspaces": "log-", + "portalDashboards": "dash-", + "powerBIDedicatedCapacities": "pbi-", + "purviewAccounts": "pview-", + "recoveryServicesVaults": "rsv-", + "resourcesResourceGroups": "rg-", + "searchSearchServices": "srch-", + "serviceBusNamespaces": "sb-", + "serviceBusNamespacesQueues": "sbq-", + "serviceBusNamespacesTopics": "sbt-", + "serviceEndPointPolicies": "se-", + "serviceFabricClusters": "sf-", + "signalRServiceSignalR": "sigr", + "sqlManagedInstances": "sqlmi-", + "sqlServers": "sql-", + "sqlServersDataWarehouse": "sqldw-", + "sqlServersDatabases": "sqldb-", + "sqlServersDatabasesStretch": "sqlstrdb-", + "storageStorageAccounts": "st", + "storageStorageAccountsVm": "stvm", + "storSimpleManagers": "ssimp", + "streamAnalyticsCluster": "asa-", + "synapseWorkspaces": "syn", + "synapseWorkspacesAnalyticsWorkspaces": "synw", + "synapseWorkspacesSqlPoolsDedicated": "syndp", + "synapseWorkspacesSqlPoolsSpark": "synsp", + "timeSeriesInsightsEnvironments": "tsi-", + "webServerFarms": "plan-", + "webSitesAppService": "app-", + "webSitesAppServiceEnvironment": "ase-", + "webSitesFunctions": "func-", + "webStaticSites": "stapp-" +} diff --git a/infra/aspire.bicep b/infra/aspire.bicep index add37d05..d7caaa48 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -39,6 +39,14 @@ var resourceToken = uniqueString(resourceGroup().id) #disable-next-line no-unused-vars // var apiServiceName = 'python-api' + +// Define tables for the storage account +param tables array = [ + { + name: 'events' + } +] + // Add resources to be provisioned below. // Provision Key Vault @@ -54,6 +62,17 @@ module keyVault './core/security/keyvault.bicep' = { } } +// Provision Storage Account +module storageAccount 'core/storage/storage-account.bicep' = { + name: 'storageAccount' + params: { + name: 'st${resourceToken}' + location: location + tags: tags + tables: tables + } +} + // Add outputs from the deployment here, if needed. // // This allows the outputs to be referenced by other bicep deployments in the deployment pipeline, diff --git a/infra/storage-account.bicep b/infra/core/storage/storage-account.bicep similarity index 82% rename from infra/storage-account.bicep rename to infra/core/storage/storage-account.bicep index 9e46a92a..6149fb2f 100644 --- a/infra/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -1,115 +1,101 @@ -metadata description = 'Creates an Azure storage account.' -param storageName string = '' -param location string = resourceGroup().location -param tags object = {} - -@allowed([ - 'Cool' - 'Hot' - 'Premium' ]) -param accessTier string = 'Hot' -param allowBlobPublicAccess bool = true -param allowCrossTenantReplication bool = true -param allowSharedKeyAccess bool = true -param containers array = [] -param corsRules array = [] -param defaultToOAuthAuthentication bool = false -param deleteRetentionPolicy object = {} -@allowed([ 'AzureDnsZone', 'Standard' ]) -param dnsEndpointType string = 'Standard' -param files array = [] -param kind string = 'StorageV2' -param minimumTlsVersion string = 'TLS1_2' -param queues array = [] -param shareDeleteRetentionPolicy object = {} -param supportsHttpsTrafficOnly bool = true - -// tables list -param tables array = [ - { - name: 'events' - } -] - -param networkAcls object = { - bypass: 'AzureServices' - defaultAction: 'Allow' -} -@allowed([ 'Enabled', 'Disabled' ]) -param publicNetworkAccess string = 'Enabled' -param sku object = { name: 'Standard_LRS' } - -var abbrs = loadJsonContent('./abbreviations.json') -var resourceToken = uniqueString(resourceGroup().id) - -resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { - name : !empty(storageName) ? storageName : '${abbrs.storageAccounts}${resourceToken}' - location: location - tags: tags - kind: kind - sku: sku - properties: { - accessTier: accessTier - allowBlobPublicAccess: allowBlobPublicAccess - allowCrossTenantReplication: allowCrossTenantReplication - allowSharedKeyAccess: allowSharedKeyAccess - defaultToOAuthAuthentication: defaultToOAuthAuthentication - dnsEndpointType: dnsEndpointType - minimumTlsVersion: minimumTlsVersion - networkAcls: networkAcls - publicNetworkAccess: publicNetworkAccess - supportsHttpsTrafficOnly: supportsHttpsTrafficOnly - } - - resource blobServices 'blobServices' = if (!empty(containers)) { - name: 'default' - properties: { - cors: { - corsRules: corsRules - } - deleteRetentionPolicy: deleteRetentionPolicy - } - resource container 'containers' = [for container in containers: { - name: container.name - properties: { - publicAccess: container.?publicAccess ?? 'None' - } - }] - } - - resource fileServices 'fileServices' = if (!empty(files)) { - name: 'default' - properties: { - cors: { - corsRules: corsRules - } - shareDeleteRetentionPolicy: shareDeleteRetentionPolicy - } - } - - resource queueServices 'queueServices' = if (!empty(queues)) { - name: 'default' - properties: { - - } - resource queue 'queues' = [for queue in queues: { - name: queue.name - properties: { - metadata: {} - } - }] - } - - resource tableServices 'tableServices' = if (!empty(tables)) { - name: 'default' - properties: {} - resource table 'tables' = [for table in tables: { - name: table.name - properties: {} - }] - } -} - -output id string = storage.id -output name string = storage.name -output primaryEndpoints object = storage.properties.primaryEndpoints +metadata description = 'Creates an Azure storage account.' +param name string +param location string = resourceGroup().location +param tags object = {} + +@allowed([ + 'Cool' + 'Hot' + 'Premium' ]) +param accessTier string = 'Hot' +param allowBlobPublicAccess bool = true +param allowCrossTenantReplication bool = true +param allowSharedKeyAccess bool = true +param containers array = [] +param corsRules array = [] +param defaultToOAuthAuthentication bool = false +param deleteRetentionPolicy object = {} +@allowed([ 'AzureDnsZone', 'Standard' ]) +param dnsEndpointType string = 'Standard' +param files array = [] +param kind string = 'StorageV2' +param minimumTlsVersion string = 'TLS1_2' +param queues array = [] +param shareDeleteRetentionPolicy object = {} +param supportsHttpsTrafficOnly bool = true +param tables array = [] +param networkAcls object = { + bypass: 'AzureServices' + defaultAction: 'Allow' +} +@allowed([ 'Enabled', 'Disabled' ]) +param publicNetworkAccess string = 'Enabled' +param sku object = { name: 'Standard_LRS' } + +resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { + name: name + location: location + tags: tags + kind: kind + sku: sku + properties: { + accessTier: accessTier + allowBlobPublicAccess: allowBlobPublicAccess + allowCrossTenantReplication: allowCrossTenantReplication + allowSharedKeyAccess: allowSharedKeyAccess + defaultToOAuthAuthentication: defaultToOAuthAuthentication + dnsEndpointType: dnsEndpointType + minimumTlsVersion: minimumTlsVersion + networkAcls: networkAcls + publicNetworkAccess: publicNetworkAccess + supportsHttpsTrafficOnly: supportsHttpsTrafficOnly + } + + resource blobServices 'blobServices' = if (!empty(containers)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + deleteRetentionPolicy: deleteRetentionPolicy + } + resource container 'containers' = [for container in containers: { + name: container.name + properties: { + publicAccess: contains(container, 'publicAccess') ? container.publicAccess : 'None' + } + }] + } + + resource fileServices 'fileServices' = if (!empty(files)) { + name: 'default' + properties: { + cors: { + corsRules: corsRules + } + shareDeleteRetentionPolicy: shareDeleteRetentionPolicy + } + } + + resource queueServices 'queueServices' = if (!empty(queues)) { + name: 'default' + properties: { + + } + resource queue 'queues' = [for queue in queues: { + name: queue.name + properties: { + metadata: {} + } + }] + } + + resource tableServices 'tableServices' = if (!empty(tables)) { + name: 'default' + properties: {} + } +} + +output id string = storage.id +output name string = storage.name +output primaryEndpoints object = storage.properties.primaryEndpoints From 32d112aba384df20a7f93b6d773828bf9803f610 Mon Sep 17 00:00:00 2001 From: tae0y Date: Tue, 3 Sep 2024 23:44:54 +0900 Subject: [PATCH 05/17] =?UTF-8?q?update=20:=20bicep=20=EA=B0=81=EC=A3=BC?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/core/storage/storage-account.bicep | 1 + 1 file changed, 1 insertion(+) diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index 6149fb2f..5f6f40d0 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -62,6 +62,7 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { resource container 'containers' = [for container in containers: { name: container.name properties: { + // todo: Warning use-safe-access: Use the safe access (.?) operator instead of checking object contents with the 'contains' function. [https://aka.ms/bicep/linter/use-safe-access] publicAccess: contains(container, 'publicAccess') ? container.publicAccess : 'None' } }] From 4a9b9ca097deed6cccf460639f89b89d78912387 Mon Sep 17 00:00:00 2001 From: tae0y Date: Tue, 3 Sep 2024 23:49:57 +0900 Subject: [PATCH 06/17] =?UTF-8?q?update=20:=20table=20=EC=83=9D=EC=84=B1?= =?UTF-8?q?=20=EA=B5=AC=EB=AC=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/core/storage/storage-account.bicep | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index 5f6f40d0..d9657ec0 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -94,6 +94,11 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { resource tableServices 'tableServices' = if (!empty(tables)) { name: 'default' properties: {} + // create tables pre-defined in aspire.bicep + resource table 'tables' = [for table in tables: { + name: table.name + properties: {} + }] } } From 504e7748c717da7bd18b8a00dfbc396f03d0c169 Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 11:13:53 +0900 Subject: [PATCH 07/17] =?UTF-8?q?update=20:=20connectionstring=EC=9D=84=20?= =?UTF-8?q?keyvault=EC=97=90=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 31 ++++++++++++++++++------ infra/core/storage/storage-account.bicep | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index d7caaa48..e6a5d7cc 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -17,6 +17,11 @@ param enabledForDeployment bool = true param enabledForTemplateDeployment bool = true param enableRbacAuthorization bool = true +// parameters for storage account +param storageAccountName string = '' +// tableNames passed as a comma separated string from command line +param tableNames string = 'events,tests' + var abbrs = loadJsonContent('./abbreviations.json') // Tags that should be applied to all resources. @@ -40,12 +45,14 @@ var resourceToken = uniqueString(resourceGroup().id) // var apiServiceName = 'python-api' -// Define tables for the storage account -param tables array = [ - { - name: 'events' - } -] +// resolved key vault name +var resolvedKeyVaultName = !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' + +// resolved storage account name +var resolvedStorageAccountName = !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' + +// tables for storage account seperated by comma +var tables = split(tableNames, ',') // Add resources to be provisioned below. @@ -53,7 +60,7 @@ param tables array = [ module keyVault './core/security/keyvault.bicep' = { name: 'keyVault' params: { - name: !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' + name: resolvedKeyVaultName location: location tags: tags enabledForDeployment: enabledForDeployment @@ -66,13 +73,21 @@ module keyVault './core/security/keyvault.bicep' = { module storageAccount 'core/storage/storage-account.bicep' = { name: 'storageAccount' params: { - name: 'st${resourceToken}' + name: resolvedStorageAccountName location: location tags: tags tables: tables } } +// Save connection string to Key Vault +resource secret 'Microsoft.Keyvault/vaults/secrets@2023-07-01' = { + name: '${resolvedKeyVaultName}/storageAccountConnectionString' + properties: { + value: '${storageAccount.outputs.primaryEndpoints.blob}' + } +} + // Add outputs from the deployment here, if needed. // // This allows the outputs to be referenced by other bicep deployments in the deployment pipeline, diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index d9657ec0..266a9c4e 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -96,7 +96,7 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { properties: {} // create tables pre-defined in aspire.bicep resource table 'tables' = [for table in tables: { - name: table.name + name: table properties: {} }] } From 24689c5cfbdbb23e350239b1897b31c737e4428e Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 11:45:18 +0900 Subject: [PATCH 08/17] =?UTF-8?q?staging=20:=20checkout=EC=A0=84=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index e6a5d7cc..08a9368d 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -84,10 +84,15 @@ module storageAccount 'core/storage/storage-account.bicep' = { resource secret 'Microsoft.Keyvault/vaults/secrets@2023-07-01' = { name: '${resolvedKeyVaultName}/storageAccountConnectionString' properties: { - value: '${storageAccount.outputs.primaryEndpoints.blob}' + //value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${listKeys(storageAccount.name, '2024-03-01').keys[0].value};EndpointSuffix=${environment().suffixes.storage}' + value: 'DefaultEndpointsProtocol=https;EndpointSuffix=${storageAccount.outputs.endpoint};AccountName=${storageAccount.outputs.name};AccountKey=${listKeys(storageAccount.outputs.name,'2021-04-01').keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' } } +// Role Assignment for Key Vault secret : creator admin, apiapp user + + + // Add outputs from the deployment here, if needed. // // This allows the outputs to be referenced by other bicep deployments in the deployment pipeline, From c1895eaf58ef276c08da1a211273f127c2926e51 Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 14:26:35 +0900 Subject: [PATCH 09/17] =?UTF-8?q?update=20:=20connection=20string=EC=9D=84?= =?UTF-8?q?=20=EC=A0=95=EC=83=81=EC=A0=81=EC=9C=BC=EB=A1=9C=20=EC=B0=B8?= =?UTF-8?q?=EC=A1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index 08a9368d..2752efc8 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -80,19 +80,20 @@ module storageAccount 'core/storage/storage-account.bicep' = { } } -// Save connection string to Key Vault -resource secret 'Microsoft.Keyvault/vaults/secrets@2023-07-01' = { +// save connection string to Key Vault +// reference to storage account +resource storageAccountReference 'Microsoft.Storage/storageAccounts@2022-09-01' existing = { + name: resolvedStorageAccountName +} + +// save connection string to key vault +resource storageAccountConnectionString 'Microsoft.Keyvault/vaults/secrets@2023-07-01' = { name: '${resolvedKeyVaultName}/storageAccountConnectionString' properties: { - //value: 'DefaultEndpointsProtocol=https;AccountName=${storageAccount.name};AccountKey=${listKeys(storageAccount.name, '2024-03-01').keys[0].value};EndpointSuffix=${environment().suffixes.storage}' - value: 'DefaultEndpointsProtocol=https;EndpointSuffix=${storageAccount.outputs.endpoint};AccountName=${storageAccount.outputs.name};AccountKey=${listKeys(storageAccount.outputs.name,'2021-04-01').keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' + value: 'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${resolvedStorageAccountName};AccountKey=${storageAccountReference.listKeys().keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' } } -// Role Assignment for Key Vault secret : creator admin, apiapp user - - - // Add outputs from the deployment here, if needed. // // This allows the outputs to be referenced by other bicep deployments in the deployment pipeline, From 8162793638c91e10bd588260d5fc3e306a9c8062 Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 14:36:01 +0900 Subject: [PATCH 10/17] =?UTF-8?q?update=20:=20=EA=B6=8C=ED=95=9C=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20placeholder=20=EA=B5=AC=EB=AC=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index 2752efc8..5e5bcba1 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -17,6 +17,10 @@ param enabledForDeployment bool = true param enabledForTemplateDeployment bool = true param enableRbacAuthorization bool = true +//TODO: 배포 시점에 사용자 princpalId, apiapp principalId를 받는 방법 조사 +param creatorAdminPrincipalId string = '' +param apiAppUserPrincipalId string = '' + // parameters for storage account param storageAccountName string = '' // tableNames passed as a comma separated string from command line @@ -94,6 +98,23 @@ resource storageAccountConnectionString 'Microsoft.Keyvault/vaults/secrets@2023- } } +// Role Assignment for Key Vault secret : creator admin, apiapp user +resource keyVaultSecretRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { + name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-role-assignment') + properties: { + principalId: creatorAdminPrincipalId + roleDefinitionId: '00482A5A-887F-4FB3-B363-3B7FE8E74483' // administrator role + } +} + +resource keyVaultSecretApiAppRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { + name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-apiapp-role-assignment') + properties: { + principalId: apiAppUserPrincipalId + roleDefinitionId: '4633458B-17DE-408A-B874-0445C86B69E6' // secret user role + } +} + // Add outputs from the deployment here, if needed. // // This allows the outputs to be referenced by other bicep deployments in the deployment pipeline, From ac8426e1adb11d57a3e3ba3c339ef023e6b85688 Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 15:44:11 +0900 Subject: [PATCH 11/17] =?UTF-8?q?update=20:=20=EA=B6=8C=ED=95=9C=EC=84=A4?= =?UTF-8?q?=EC=A0=95=20=EA=B5=AC=EB=AC=B8=20=EC=9E=84=EC=8B=9C=20=EC=A3=BC?= =?UTF-8?q?=EC=84=9D=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index 5e5bcba1..16556249 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -18,8 +18,8 @@ param enabledForTemplateDeployment bool = true param enableRbacAuthorization bool = true //TODO: 배포 시점에 사용자 princpalId, apiapp principalId를 받는 방법 조사 -param creatorAdminPrincipalId string = '' -param apiAppUserPrincipalId string = '' +//param creatorAdminPrincipalId string = '' +//param apiAppUserPrincipalId string = '' // parameters for storage account param storageAccountName string = '' @@ -98,22 +98,22 @@ resource storageAccountConnectionString 'Microsoft.Keyvault/vaults/secrets@2023- } } -// Role Assignment for Key Vault secret : creator admin, apiapp user -resource keyVaultSecretRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { - name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-role-assignment') - properties: { - principalId: creatorAdminPrincipalId - roleDefinitionId: '00482A5A-887F-4FB3-B363-3B7FE8E74483' // administrator role - } -} - -resource keyVaultSecretApiAppRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { - name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-apiapp-role-assignment') - properties: { - principalId: apiAppUserPrincipalId - roleDefinitionId: '4633458B-17DE-408A-B874-0445C86B69E6' // secret user role - } -} +// TODO: Role Assignment for Key Vault secret : creator admin, apiapp user +//resource keyVaultSecretRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { +// name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-role-assignment') +// properties: { +// principalId: creatorAdminPrincipalId +// roleDefinitionId: '00482A5A-887F-4FB3-B363-3B7FE8E74483' // administrator role +// } +//} +// +//resource keyVaultSecretApiAppRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { +// name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-apiapp-role-assignment') +// properties: { +// principalId: apiAppUserPrincipalId +// roleDefinitionId: '4633458B-17DE-408A-B874-0445C86B69E6' // secret user role +// } +//} // Add outputs from the deployment here, if needed. // From ff4ef4b199eed9ce1e6c4ab70eb2695f7f65a6db Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 7 Sep 2024 20:59:04 +0900 Subject: [PATCH 12/17] =?UTF-8?q?update=20:=20storage-account.bicep=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=EC=97=90=EC=84=9C=20connection=20string=20?= =?UTF-8?q?=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 30 ++++-------------------- infra/core/storage/storage-account.bicep | 11 +++++++++ 2 files changed, 16 insertions(+), 25 deletions(-) diff --git a/infra/aspire.bicep b/infra/aspire.bicep index 16556249..a2abdae5 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -24,7 +24,7 @@ param enableRbacAuthorization bool = true // parameters for storage account param storageAccountName string = '' // tableNames passed as a comma separated string from command line -param tableNames string = 'events,tests' +param tableNames string = 'events' var abbrs = loadJsonContent('./abbreviations.json') @@ -48,13 +48,6 @@ var resourceToken = uniqueString(resourceGroup().id) #disable-next-line no-unused-vars // var apiServiceName = 'python-api' - -// resolved key vault name -var resolvedKeyVaultName = !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' - -// resolved storage account name -var resolvedStorageAccountName = !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' - // tables for storage account seperated by comma var tables = split(tableNames, ',') @@ -64,7 +57,7 @@ var tables = split(tableNames, ',') module keyVault './core/security/keyvault.bicep' = { name: 'keyVault' params: { - name: resolvedKeyVaultName + name: !empty(keyVaultName) ? keyVaultName : '${abbrs.keyVaultVaults}${resourceToken}' location: location tags: tags enabledForDeployment: enabledForDeployment @@ -74,27 +67,14 @@ module keyVault './core/security/keyvault.bicep' = { } // Provision Storage Account -module storageAccount 'core/storage/storage-account.bicep' = { +module storageAccount './core/storage/storage-account.bicep' = { name: 'storageAccount' params: { - name: resolvedStorageAccountName + name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' location: location tags: tags tables: tables - } -} - -// save connection string to Key Vault -// reference to storage account -resource storageAccountReference 'Microsoft.Storage/storageAccounts@2022-09-01' existing = { - name: resolvedStorageAccountName -} - -// save connection string to key vault -resource storageAccountConnectionString 'Microsoft.Keyvault/vaults/secrets@2023-07-01' = { - name: '${resolvedKeyVaultName}/storageAccountConnectionString' - properties: { - value: 'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${resolvedStorageAccountName};AccountKey=${storageAccountReference.listKeys().keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' + keyVaultName: keyVault.outputs.name } } diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index 266a9c4e..fcbce34c 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -31,6 +31,7 @@ param networkAcls object = { @allowed([ 'Enabled', 'Disabled' ]) param publicNetworkAccess string = 'Enabled' param sku object = { name: 'Standard_LRS' } +param keyVaultName string = '' resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { name: name @@ -102,6 +103,16 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { } } +//TODO: 모듈 내부에서 다른 module을 생성, 다른 module의 output을 사용하고 있음. 이 방법이 올바른지 확인 필요 +module keyVaultSecrets '../../core/security/keyvault-secret.bicep' = { + name: 'keyVaultSecrets' + params: { + name: 'storage-connection-string-new' + secretValue:'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storage.name};AccountKey=${storage.listKeys().keys[0].value};BlobEndpoint=${storage.properties.primaryEndpoints.blob};FileEndpoint=${storage.properties.primaryEndpoints.file};QueueEndpoint=${storage.properties.primaryEndpoints.queue};TableEndpoint=${storage.properties.primaryEndpoints.table}' + keyVaultName:keyVaultName + } +} + output id string = storage.id output name string = storage.name output primaryEndpoints object = storage.properties.primaryEndpoints From 03939f27a74af498c6189adc3fcee4f4b08047ec Mon Sep 17 00:00:00 2001 From: tae0y Date: Wed, 11 Sep 2024 00:54:48 +0900 Subject: [PATCH 13/17] =?UTF-8?q?update=20:=20aspire.bicep=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20secret=20=EC=A0=80=EC=9E=A5=EC=9C=84=EC=B9=98=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/aspire.bicep | 20 ++ infra/core/storage/storage-account.bicep | 10 - issues.md | 276 ++++++++++++++++ nowissues.ps1 | 402 +++++++++++++++++++++++ 4 files changed, 698 insertions(+), 10 deletions(-) create mode 100644 issues.md create mode 100644 nowissues.ps1 diff --git a/infra/aspire.bicep b/infra/aspire.bicep index a2abdae5..148c1895 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -78,6 +78,26 @@ module storageAccount './core/storage/storage-account.bicep' = { } } +resource storageAccountReference 'Microsoft.Storage/storageAccounts@2023-01-01' existing = { + name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' +} + +// Provision Key Vault Secret +module keyVaultSecrets './core/security/keyvault-secret.bicep' = { + name: 'keyVaultSecrets' + params: { + keyVaultName: keyVault.outputs.name + tags: tags + name: 'storage-connection-string' + secretValue: 'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storageAccount.name};AccountKey=${storageAccountReference.listKeys().keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' + } + + dependsOn: [ + storageAccount + keyVault + ] +} + // TODO: Role Assignment for Key Vault secret : creator admin, apiapp user //resource keyVaultSecretRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { // name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-role-assignment') diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index fcbce34c..e8a609e8 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -103,16 +103,6 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { } } -//TODO: 모듈 내부에서 다른 module을 생성, 다른 module의 output을 사용하고 있음. 이 방법이 올바른지 확인 필요 -module keyVaultSecrets '../../core/security/keyvault-secret.bicep' = { - name: 'keyVaultSecrets' - params: { - name: 'storage-connection-string-new' - secretValue:'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storage.name};AccountKey=${storage.listKeys().keys[0].value};BlobEndpoint=${storage.properties.primaryEndpoints.blob};FileEndpoint=${storage.properties.primaryEndpoints.file};QueueEndpoint=${storage.properties.primaryEndpoints.queue};TableEndpoint=${storage.properties.primaryEndpoints.table}' - keyVaultName:keyVaultName - } -} - output id string = storage.id output name string = storage.name output primaryEndpoints object = storage.properties.primaryEndpoints diff --git a/issues.md b/issues.md new file mode 100644 index 00000000..8db7942a --- /dev/null +++ b/issues.md @@ -0,0 +1,276 @@ +# 진행 현황 +> 생성일자: 2024-09-10 22:14:07 +> 스크립트: [https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb](https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb) + + + +## PR 현황 +- [ ] [[Playground] Add Events components](https://github.com/aliencube/azure-openai-sdk-proxy/pull/311) / `@Capella87:Inseo Lee` / updated:`2024-09-10T08:46:16Z` +- [ ] [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/pull/292) / `@tae0y:박태영` / updated:`2024-09-10T08:02:49Z` +- [ ] [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/pull/293) / `@KYJKY:김연중` / updated:`2024-09-10T07:56:11Z` +- [ ] [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/pull/294) / `@jihyunmoon16:문지현` / updated:`2024-09-10T07:44:54Z` +- [ ] [[Admin] Table Storage Connection Setting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/299) / `@sikutisa:sikutisa` / updated:`2024-09-10T07:32:33Z` +- [ ] [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/pull/312) / `@yjchun626:YooJung Chun` / updated:`2024-09-10T04:20:17Z` +- [ ] [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/pull/263) / `@jihyunmoon16:문지현` / updated:`2024-09-07T05:06:59Z` +- [ ] [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/pull/281) / `@tae0y:박태영` / updated:`2024-09-06T12:37:16Z` +- [ ] [[Playground] 177 auth UI component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/280) / `@pmj-chosim:박민진` / updated:`2024-09-06T04:40:12Z` + + + +## 팀별 진행현황 (updated 기준 내림차순) + +### team-kim 🔑 +- [ ] [[Admin] Component: Create event details - UI component](https://github.com/aliencube/azure-openai-sdk-proxy/issues/214) / `@KYJKY:김연중` +- [ ] [[DevOps] Table Storage용 bicep 파일 만들기](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283) / `@tae0y:박태영` +- [ ] [[Backend API] Implement endpoint for create event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213) / `@tae0y:박태영` +- [ ] [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/169) / `@jihyunmoon16:문지현` +- [ ] [[Admin] Component: Navigation Top List Bar - UI component](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272) / `@n-y-kim:Nayeon Kim` +- [ ] [[Backend API] Implement endpoint for update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203) / `@SeungHuLee:Lee Seung Hu` +- [ ] [[Chat Completions] Request payload definition](https://github.com/aliencube/azure-openai-sdk-proxy/issues/21) / `@jihyunmoon16:문지현` + +### team-oh 🙆‍♂️ +- [ ] [[Playground] Refactoring `OpenAIApiClient`](https://github.com/aliencube/azure-openai-sdk-proxy/issues/163) / `@5jisoo:Lucy Oh` +- [ ] [[Playground] Component - list of events (UI only)](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181) / `@Capella87:Inseo Lee` +- [ ] [[DevOps] 깃헙 액션 워크플로우 리팩토링](https://github.com/aliencube/azure-openai-sdk-proxy/issues/264) / `@DOZAKA:BYUNGKWON DO` + +### team-park 🐧 +- [ ] [[Playground] System Message Tab: UI Component only](https://github.com/aliencube/azure-openai-sdk-proxy/issues/289) / `@yjchun626:YooJung Chun` +- [ ] [[Admin] 스토리지 커넥션 개체 생성](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300) / `@sikutisa:sikutisa` +- [ ] [[Backend API] Implement endpoint for view event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208) / `@sikutisa:sikutisa` +- [ ] [[Playground] Component for auth (UI only)](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177) / `@pmj-chosim:박민진` + + + +## 이슈현황 +### EPIC 🚀 +- [ ] [[Admin] Admin page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/7) +- [ ] [[Admin] Proxy API key](https://github.com/aliencube/azure-openai-sdk-proxy/issues/188) +- [ ] [[Playground] Playground auth with GitHub](https://github.com/aliencube/azure-openai-sdk-proxy/issues/10) +- [ ] [[Playground] Playground page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/6) + +### FEATURE ✨ +- [ ] [[Admin] Component: List of events](https://github.com/aliencube/azure-openai-sdk-proxy/issues/185) +- [ ] [[Admin] Component: New event](https://github.com/aliencube/azure-openai-sdk-proxy/issues/186) +- [ ] [[Admin] Component: Update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/196) +- [ ] [[Admin] Component: View event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/187) +- [ ] [[Admin] Landing page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/184) +- [ ] [[Admin] Navigation sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/238) +- [ ] [[Admin] Resources](https://github.com/aliencube/azure-openai-sdk-proxy/issues/302) +- [ ] [[Backend API] Add internal auth](https://github.com/aliencube/azure-openai-sdk-proxy/issues/19) +- [ ] [[Playground] Component: Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/245) +- [ ] [[Playground] List of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/173) + +### STORY 📖 +- [ ] [[Admin] Add new resource](https://github.com/aliencube/azure-openai-sdk-proxy/issues/303) +- [ ] [[Admin] Component: Create event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/211) +- [ ] [[Admin] Component: Landing Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/232) +- [ ] [[Admin] Component: List event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/216) +- [ ] [[Admin] Component: Navigation Top List Bar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/271) +- [ ] [[Admin] Component: Navigation sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/239) +- [ ] [[Admin] Component: Update event details - populate event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/198) +- [ ] [[Admin] Component: Update event details - update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/201) +- [ ] [[Admin] Component: View event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/206) +- [ ] [[Backend API] API Key generation](https://github.com/aliencube/azure-openai-sdk-proxy/issues/23) +- [ ] [[Backend API] API Key handling](https://github.com/aliencube/azure-openai-sdk-proxy/issues/24) +- [ ] [[Backend API] API Key store](https://github.com/aliencube/azure-openai-sdk-proxy/issues/25) +- [ ] [[Backend API] Add internal auth](https://github.com/aliencube/azure-openai-sdk-proxy/issues/19) +- [ ] [[Backend API] Azure Key Vault for OpenAI API keys](https://github.com/aliencube/azure-openai-sdk-proxy/issues/161) +- [ ] [[OpenAPI] OpenAPI spec](https://github.com/aliencube/azure-openai-sdk-proxy/issues/183) +- [ ] [[Playground] Component - Tab for system message and parameters](https://github.com/aliencube/azure-openai-sdk-proxy/issues/226) +- [ ] [[Playground] Component: Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/245) +- [ ] [[Playground] Event selection](https://github.com/aliencube/azure-openai-sdk-proxy/issues/178) +- [ ] [[Playground] List of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/173) + +### TASK + +#### ASSIGNED 👤 +- [ ] [[OpenAPI] Add endpoint for create new admin resource details #307](https://github.com/aliencube/azure-openai-sdk-proxy/issues/307) / `o-ii:` + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for new resource details #308](https://github.com/aliencube/azure-openai-sdk-proxy/issues/308)/`:` + - [ ] CONNECTED ISSUE: [[Admin] Component - New resource details - UI only #309](https://github.com/aliencube/azure-openai-sdk-proxy/issues/309)/`:` +- [ ] [[Admin] 스토리지 커넥션 개체 생성 #300](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300) / `sikutisa:sikutisa` + - [ ] PULL REQUEST: [[Admin] Table Storage Connection Setting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/299) +- [ ] [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/issues/289) / `yjchun626:YooJung Chun` + - [ ] PULL REQUEST: [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/pull/312) +- [ ] [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283) / `tae0y:박태영` + - [ ] PULL REQUEST: [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/pull/292) + - [ ] CONNECTED ISSUE: [[Admin] 스토리지 커넥션 개체 생성 #300](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300)/`sikutisa:sikutisa` +- [ ] [[Admin] Component: Navigation Top List Bar - UI component #272](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272) / `n-y-kim:Nayeon Kim` +- [ ] [[DevOps] 깃헙 액션 워크플로우 리팩토링 #264](https://github.com/aliencube/azure-openai-sdk-proxy/issues/264) / `DOZAKA:BYUNGKWON DO` +- [ ] [[Backend API] Implement endpoint for list event details #218](https://github.com/aliencube/azure-openai-sdk-proxy/issues/218) / `praivesi:praivesi` +- [ ] [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/issues/214) / `KYJKY:김연중` + - [ ] PULL REQUEST: [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/pull/293) +- [ ] [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213) / `tae0y:박태영` + - [ ] PULL REQUEST: [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/pull/281) + - [ ] CONNECTED ISSUE: [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283)/`tae0y:박태영` +- [ ] [[Backend API] Implement endpoint for view event details #208](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208) / `sikutisa:sikutisa` +- [ ] [[Backend API] Implement endpoint for update event details #203](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203) / `SeungHuLee:Lee Seung Hu` + - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` +- [ ] [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181) / `Capella87:Inseo Lee` + - [ ] PULL REQUEST: [[Playground] Add Events components](https://github.com/aliencube/azure-openai-sdk-proxy/pull/311) + - [ ] CONNECTED ISSUE: [[Playground] Component - list of events - page redirection #182](https://github.com/aliencube/azure-openai-sdk-proxy/issues/182)/`:` + - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI logic only) #224](https://github.com/aliencube/azure-openai-sdk-proxy/issues/224)/`:` +- [ ] [[Playground] Component for auth (UI only) #177](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177) / `pmj-chosim:박민진` + - [ ] PULL REQUEST: [[Playground] 177 auth UI component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/280) + - [ ] CONNECTED ISSUE: [[Playground] Component for auth (UI logic only) #223](https://github.com/aliencube/azure-openai-sdk-proxy/issues/223)/`:` +- [ ] [[OpenAPI] Add endpoint for list of deployment models #169](https://github.com/aliencube/azure-openai-sdk-proxy/issues/169) / `jihyunmoon16:문지현` + - [ ] PULL REQUEST: [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/pull/294) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list of deployment models #170](https://github.com/aliencube/azure-openai-sdk-proxy/issues/170)/`:` + - [x] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172)/`yjchun626:YooJung Chun` +- [ ] [[Playground] Refactoring `OpenAIApiClient` #163](https://github.com/aliencube/azure-openai-sdk-proxy/issues/163) / `5jisoo:Lucy Oh` +- [ ] [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/issues/21) / `jihyunmoon16:문지현` + - [ ] PULL REQUEST: [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/pull/263) + +#### NOT ASSIGNED ❓ +- [ ] [[Admin] Component - new resource details - UI logic only #310](https://github.com/aliencube/azure-openai-sdk-proxy/issues/310) / `:` +- [ ] [[Admin] Component - New resource details - UI only #309](https://github.com/aliencube/azure-openai-sdk-proxy/issues/309) / `:` + - [ ] CONNECTED ISSUE: [[Admin] Component - new resource details - UI logic only #310](https://github.com/aliencube/azure-openai-sdk-proxy/issues/310)/`:` +- [ ] [[Backend API] Implement endpoint for new resource details #308](https://github.com/aliencube/azure-openai-sdk-proxy/issues/308) / `:` +- [ ] [[Playground] Parameters Tab: UI Components only #290](https://github.com/aliencube/azure-openai-sdk-proxy/issues/290) / `:` +- [ ] [[Admin] Component: Navigation Top List Bar - UI Logic #273](https://github.com/aliencube/azure-openai-sdk-proxy/issues/273) / `:` + - [ ] CONNECTED ISSUE: [[Admin] Component: Navigation Top List Bar - UI component #272](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272)/`n-y-kim:Nayeon Kim` +- [ ] [[Admin] Component: Navigation sidebar - UI component #240](https://github.com/aliencube/azure-openai-sdk-proxy/issues/240) / `:` +- [ ] [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234) / `:` + - [x] CONNECTED ISSUE: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235)/`n-y-kim:Nayeon Kim` +- [ ] [[Admin] Component: Landing Page(List) - UI component #233](https://github.com/aliencube/azure-openai-sdk-proxy/issues/233) / `:` + - [x] CONNECTED ISSUE: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235)/`n-y-kim:Nayeon Kim` +- [ ] [[Playground] Component - Tab for system message and parameters (UI logic only) #227](https://github.com/aliencube/azure-openai-sdk-proxy/issues/227) / `:` +- [ ] [[Playground] Component - list of events (UI logic only) #224](https://github.com/aliencube/azure-openai-sdk-proxy/issues/224) / `:` +- [ ] [[Playground] Component for auth (UI logic only) #223](https://github.com/aliencube/azure-openai-sdk-proxy/issues/223) / `:` +- [ ] [[Playground] Component - list of deployment models (UI logic only) #222](https://github.com/aliencube/azure-openai-sdk-proxy/issues/222) / `:` +- [ ] [[Admin] Component: List event details - UI logic #220](https://github.com/aliencube/azure-openai-sdk-proxy/issues/220) / `:` +- [ ] [[Admin] Component: Create event details - UI logic #215](https://github.com/aliencube/azure-openai-sdk-proxy/issues/215) / `:` +- [ ] [[Admin] Component: View event details - UI logic #210](https://github.com/aliencube/azure-openai-sdk-proxy/issues/210) / `:` +- [ ] [[Admin] Component: View event details - UI component #209](https://github.com/aliencube/azure-openai-sdk-proxy/issues/209) / `:` +- [ ] [[Admin] Component: Update event details - UI logic (update) #205](https://github.com/aliencube/azure-openai-sdk-proxy/issues/205) / `:` + - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` +- [ ] [[Admin] Component: Update event details - UI component (update) #204](https://github.com/aliencube/azure-openai-sdk-proxy/issues/204) / `:` + - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` +- [ ] [[Admin] Component: Update event details - UI logic (view) #200](https://github.com/aliencube/azure-openai-sdk-proxy/issues/200) / `:` +- [ ] [[Admin] Component: Update event details - UI component (view) #199](https://github.com/aliencube/azure-openai-sdk-proxy/issues/199) / `:` +- [ ] [[Playground] Component - list of events - page redirection #182](https://github.com/aliencube/azure-openai-sdk-proxy/issues/182) / `:` +- [ ] [[Backend API] Implement endpoint for list of events #180](https://github.com/aliencube/azure-openai-sdk-proxy/issues/180) / `:` +- [ ] [[Backend API] Implementation for internal auth #176](https://github.com/aliencube/azure-openai-sdk-proxy/issues/176) / `:` +- [ ] [[Backend API] Interface design for internal auth #175](https://github.com/aliencube/azure-openai-sdk-proxy/issues/175) / `:` +- [ ] [[OpenAPI] Add security auth #174](https://github.com/aliencube/azure-openai-sdk-proxy/issues/174) / `:` +- [ ] [[Backend API] Implement endpoint for list of deployment models #170](https://github.com/aliencube/azure-openai-sdk-proxy/issues/170) / `:` +- [ ] [[AppHost] Add Azure Key Vault orchestration #165](https://github.com/aliencube/azure-openai-sdk-proxy/issues/165) / `:` + - [x] CONNECTED ISSUE: [[AppHost] Add bicep for Key Vault #193](https://github.com/aliencube/azure-openai-sdk-proxy/issues/193)/`justinyoo:Justin Yoo` + + + +### Closed 🚪 + +#### ASSIGNED: 👤 +- [x] [[Admin] Add test report to GitHub Actions #189](https://github.com/aliencube/azure-openai-sdk-proxy/issues/189) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [Generate test report](https://github.com/aliencube/azure-openai-sdk-proxy/pull/190) +- [x] [[Backend API] Builder pattern that returns `OpenAISettings` #166](https://github.com/aliencube/azure-openai-sdk-proxy/issues/166) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [Add `OpenAISettingsBuilder`](https://github.com/aliencube/azure-openai-sdk-proxy/pull/191) +- [x] [[AppHost] Add bicep for Key Vault #193](https://github.com/aliencube/azure-openai-sdk-proxy/issues/193) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [Add bicep files for Key Vault](https://github.com/aliencube/azure-openai-sdk-proxy/pull/194) +- [x] [[Backend API] Add Key Vault client #195](https://github.com/aliencube/azure-openai-sdk-proxy/issues/195) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [Add Key Vault client](https://github.com/aliencube/azure-openai-sdk-proxy/pull/197) +- [x] [[OpenAPI] Add endpoint for view event details #207](https://github.com/aliencube/azure-openai-sdk-proxy/issues/207) / `juhangil:Hangil Ju` + - [x] PULL REQUEST: [[OpenAPI] Add endpoint for view event details #207](https://github.com/aliencube/azure-openai-sdk-proxy/pull/231) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for view event details #208](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208)/`sikutisa:sikutisa` + - [ ] CONNECTED ISSUE: [[Admin] Component: View event details - UI logic #210](https://github.com/aliencube/azure-openai-sdk-proxy/issues/210)/`:` +- [x] [[Backend API] Review current OpenAPI doc for linting #20](https://github.com/aliencube/azure-openai-sdk-proxy/issues/20) / `tae0y:박태영` + - [x] PULL REQUEST: [Add spectral rules #20](https://github.com/aliencube/azure-openai-sdk-proxy/pull/229) + - [x] CONNECTED ISSUE: [[GitHub Actions] Add OpenAPI linting #221](https://github.com/aliencube/azure-openai-sdk-proxy/issues/221)/`sikutisa:sikutisa` +- [x] [[Playground/Admin] Add Fluent UI Nuget package #251](https://github.com/aliencube/azure-openai-sdk-proxy/issues/251) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin/Playground] Add NuGet package for Fluent UI](https://github.com/aliencube/azure-openai-sdk-proxy/pull/253) +- [x] [[Playground/Admin] Display sidebar only at the admin page #252](https://github.com/aliencube/azure-openai-sdk-proxy/issues/252) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin/Playground] Update main layout to show/hide the sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/pull/254) +- [x] [[Playground/Admin] Add Fluent UI library #250](https://github.com/aliencube/azure-openai-sdk-proxy/issues/250) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin/Playground] Add NuGet package for Fluent UI](https://github.com/aliencube/azure-openai-sdk-proxy/pull/253) + - [x] PULL REQUEST: [[Admin/Playground] Update main layout to show/hide the sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/pull/254) +- [x] [[DevOps] Add testing scripts that run on local machine #256](https://github.com/aliencube/azure-openai-sdk-proxy/issues/256) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[DevOps] Add test scripts to run locally](https://github.com/aliencube/azure-openai-sdk-proxy/pull/258) +- [x] [[DevOps] Update local test scripts #269](https://github.com/aliencube/azure-openai-sdk-proxy/issues/269) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[DevOps] Update test scripts](https://github.com/aliencube/azure-openai-sdk-proxy/pull/270) +- [x] [[OpenAPI] Add endpoint for list event details #217](https://github.com/aliencube/azure-openai-sdk-proxy/issues/217) / `tae0y:박태영` + - [x] PULL REQUEST: [[OpenAPI] Add endpoint for list event details #217](https://github.com/aliencube/azure-openai-sdk-proxy/pull/265) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list event details #218](https://github.com/aliencube/azure-openai-sdk-proxy/issues/218)/`praivesi:praivesi` + - [ ] CONNECTED ISSUE: [[Admin] Component: List event details - UI logic #220](https://github.com/aliencube/azure-openai-sdk-proxy/issues/220)/`:` +- [x] [[GitHub Actions] Add OpenAPI linting #221](https://github.com/aliencube/azure-openai-sdk-proxy/issues/221) / `sikutisa:sikutisa` + - [x] PULL REQUEST: [[Devops] Feature/221 add openapi linting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/243) +- [x] [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235) / `n-y-kim:Nayeon Kim` + - [x] PULL REQUEST: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/pull/242) +- [x] [[Playground] Component: Page component #246](https://github.com/aliencube/azure-openai-sdk-proxy/issues/246) / `5jisoo:Lucy Oh` + - [x] PULL REQUEST: [[Playground] Component: Page component #246](https://github.com/aliencube/azure-openai-sdk-proxy/pull/249) + - [x] CONNECTED ISSUE: [[Playground] Playground page layout #288](https://github.com/aliencube/azure-openai-sdk-proxy/issues/288)/`justinyoo:Justin Yoo` +- [x] [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202) / `SeungHuLee:Lee Seung Hu` + - [x] PULL REQUEST: [[OpenAPI] Add endpoint for update event details](https://github.com/aliencube/azure-openai-sdk-proxy/pull/241) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for update event details #203](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203)/`SeungHuLee:Lee Seung Hu` +- [x] [[OpenAPI] Add endpoint for create event details #212](https://github.com/aliencube/azure-openai-sdk-proxy/issues/212) / `DOZAKA:BYUNGKWON DO` + - [x] PULL REQUEST: [[OpenAPI] Add endpoint for create event details #212](https://github.com/aliencube/azure-openai-sdk-proxy/pull/261) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213)/`tae0y:박태영` + - [ ] CONNECTED ISSUE: [[Admin] Component: Create event details - UI logic #215](https://github.com/aliencube/azure-openai-sdk-proxy/issues/215)/`:` + - [ ] CONNECTED ISSUE: [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234)/`:` +- [x] [[OpenAPI] Add endpoint for list of events #179](https://github.com/aliencube/azure-openai-sdk-proxy/issues/179) / `Capella87:Inseo Lee` + - [x] PULL REQUEST: [ [OpenAPI] Add endpoint for list of events #179](https://github.com/aliencube/azure-openai-sdk-proxy/pull/259) + - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list of events #180](https://github.com/aliencube/azure-openai-sdk-proxy/issues/180)/`:` + - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181)/`Capella87:Inseo Lee` + - [ ] CONNECTED ISSUE: [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234)/`:` +- [x] [[DevOps] 테스트 케이스 수정 - 랜덤 실패 조건 확인 #279](https://github.com/aliencube/azure-openai-sdk-proxy/issues/279) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [Update tests to ensure apps are up and running](https://github.com/aliencube/azure-openai-sdk-proxy/pull/278) +- [x] [[Playground] Component - Tab for system message and parameters (UI only) #225](https://github.com/aliencube/azure-openai-sdk-proxy/issues/225) / `5jisoo:Lucy Oh` + - [x] PULL REQUEST: [[Playground] Component - Tab for system message and parameters (UI only) #225](https://github.com/aliencube/azure-openai-sdk-proxy/pull/244) + - [ ] CONNECTED ISSUE: [[Playground] Component - Tab for system message and parameters (UI logic only) #227](https://github.com/aliencube/azure-openai-sdk-proxy/issues/227)/`:` +- [x] [[Backend API] Refactor OpenAPI doc version to `appsettings.json` #267](https://github.com/aliencube/azure-openai-sdk-proxy/issues/267) / `sikutisa:sikutisa` + - [x] PULL REQUEST: [[Backend API]Refactor OpenAPI doc version to appsettings.json](https://github.com/aliencube/azure-openai-sdk-proxy/pull/274) + - [x] CONNECTED ISSUE: [[DevOps] Update local test scripts #269](https://github.com/aliencube/azure-openai-sdk-proxy/issues/269)/`justinyoo:Justin Yoo` +- [x] [[Admin] 어드민 이벤트용 서비스레이어 정의 #284](https://github.com/aliencube/azure-openai-sdk-proxy/issues/284) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin] Add admin event service layer](https://github.com/aliencube/azure-openai-sdk-proxy/pull/286) +- [x] [[Playground] Playground page layout #288](https://github.com/aliencube/azure-openai-sdk-proxy/issues/288) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Playground] playground page layout](https://github.com/aliencube/azure-openai-sdk-proxy/pull/291) +- [x] [[Admin] Page Component - new event #295](https://github.com/aliencube/azure-openai-sdk-proxy/issues/295) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin] Add new event page](https://github.com/aliencube/azure-openai-sdk-proxy/pull/296) +- [x] [[Playground] Component - button to display a given input #171](https://github.com/aliencube/azure-openai-sdk-proxy/issues/171) / `o-ii:` + - [x] PULL REQUEST: [[Playground] Component - button to display a given input #171](https://github.com/aliencube/azure-openai-sdk-proxy/pull/236) + - [x] PULL REQUEST: [Update debug button component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/297) + - [x] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172)/`yjchun626:YooJung Chun` + - [ ] CONNECTED ISSUE: [[Playground] Component for auth (UI only) #177](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177)/`pmj-chosim:박민진` + - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181)/`Capella87:Inseo Lee` +- [x] [[Admin] 어드민용 리포지토리 레이어 정의 #285](https://github.com/aliencube/azure-openai-sdk-proxy/issues/285) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin] Add repository layer for admin events](https://github.com/aliencube/azure-openai-sdk-proxy/pull/287) +- [x] [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172) / `yjchun626:YooJung Chun` + - [x] PULL REQUEST: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/pull/260) + - [ ] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI logic only) #222](https://github.com/aliencube/azure-openai-sdk-proxy/issues/222)/`:` +- [x] [[Chat Completions] Response payload definition #22](https://github.com/aliencube/azure-openai-sdk-proxy/issues/22) / `jhmin99:Jihong Min` + - [x] PULL REQUEST: [[Chat Completions] Response payload definition #22 (backup)](https://github.com/aliencube/azure-openai-sdk-proxy/pull/298) +- [x] [[Admin] Resource details entity #304](https://github.com/aliencube/azure-openai-sdk-proxy/issues/304) / `justinyoo:Justin Yoo` + - [x] PULL REQUEST: [[Admin] Add admin resource details entity](https://github.com/aliencube/azure-openai-sdk-proxy/pull/306) +- [x] [[Admin] Component: List event details - UI component #219](https://github.com/aliencube/azure-openai-sdk-proxy/issues/219) / `praivesi:praivesi` + - [x] PULL REQUEST: [[Admin] Component: List event details - UI component #219](https://github.com/aliencube/azure-openai-sdk-proxy/pull/266) + +#### NOT ASSIGNED: ❓ +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/54) / `@null:null` / closed:`2024-07-20T05:16:41Z` +- [x] [과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/53) / `@null:null` / closed:`2024-07-19T14:55:35Z` +- [x] [재제출_과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/52) / `@null:null` / closed:`2024-07-19T14:44:07Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/51) / `@null:null` / closed:`2024-07-19T13:01:19Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/50) / `@null:null` / closed:`2024-07-19T12:44:00Z` +- [x] [과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/49) / `@null:null` / closed:`2024-07-19T12:31:56Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/48) / `@null:null` / closed:`2024-07-19T12:17:18Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/47) / `@null:null` / closed:`2024-07-19T11:29:54Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/46) / `@null:null` / closed:`2024-07-19T10:06:31Z` +- [x] [OSSCA 1st 과제 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/44) / `@null:null` / closed:`2024-07-19T09:39:35Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/45) / `@null:null` / closed:`2024-07-19T08:23:18Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/43) / `@null:null` / closed:`2024-07-19T08:03:07Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/42) / `@null:null` / closed:`2024-07-19T06:55:25Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/41) / `@null:null` / closed:`2024-07-19T03:18:32Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/39) / `@null:null` / closed:`2024-07-19T03:16:41Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/40) / `@null:null` / closed:`2024-07-19T03:13:36Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/38) / `@null:null` / closed:`2024-07-18T21:34:31Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/37) / `@null:null` / closed:`2024-07-18T20:51:22Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/36) / `@null:null` / closed:`2024-07-18T16:47:24Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/35) / `@null:null` / closed:`2024-07-18T14:49:30Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/34) / `@null:null` / closed:`2024-07-17T18:07:41Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/33) / `@null:null` / closed:`2024-07-17T11:42:16Z` +- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/32) / `@null:null` / closed:`2024-07-17T08:34:38Z` +- [x] [AOAI SDK to the latest](https://github.com/aliencube/azure-openai-sdk-proxy/issues/16) / `@null:null` / closed:`2024-06-02T04:54:11Z` +- [x] [OpenAPI docs](https://github.com/aliencube/azure-openai-sdk-proxy/issues/11) / `@null:null` / closed:`2023-12-05T16:53:42Z` +- [x] [Get access code by GitHub alias](https://github.com/aliencube/azure-openai-sdk-proxy/issues/13) / `@null:null` / closed:`2023-12-05T13:45:39Z` +- [x] [Get all event access codes](https://github.com/aliencube/azure-openai-sdk-proxy/issues/5) / `@null:null` / closed:`2023-12-05T13:45:38Z` +- [x] [Get event by ID](https://github.com/aliencube/azure-openai-sdk-proxy/issues/4) / `@null:null` / closed:`2023-12-05T09:28:19Z` +- [x] [Get all events](https://github.com/aliencube/azure-openai-sdk-proxy/issues/3) / `@null:null` / closed:`2023-12-05T09:28:18Z` +- [x] [Create event](https://github.com/aliencube/azure-openai-sdk-proxy/issues/2) / `@null:null` / closed:`2023-12-05T09:28:17Z` diff --git a/nowissues.ps1 b/nowissues.ps1 new file mode 100644 index 00000000..d645ea6c --- /dev/null +++ b/nowissues.ps1 @@ -0,0 +1,402 @@ +######################################################################################################################## +# 스크립트 구조 +# 가. 함수 정의부 +# 나. 함수 호출부 +# +# + + +######################################################################################################################## +# 가. 함수 정의부 +# +# +# +# + +#function Convert-To-Markdown-PlainLink { +# param ( +# [string]$LINK_TITLE, # 링크명 +# [string]$LINK_URL # 링크URL +# ) +# +# if ($null -eq $LINK_TITLE) { +# Write-Error "LINK_TITLE is required." +# return +# } +# if ($null -eq $LINK_URL) { +# Write-Error "LINK_URL is required." +# return +# } +# +# return ("[" + $LINK_TITLE + "](" + $LINK_URL + ")") +#} +# +#function Convert-To-Markdown-SelectBoxLink { +# param ( +# [string]$LINK_SELECTED, # 선택여부 +# [string]$LINK_TITLE, # 링크명 +# [string]$LINK_URL # 링크URL +# ) +# if ($LINK_SELECTED -eq $null) { +# Write-Error "LINK_SELECTED is required." +# return +# } +# if ($LINK_TITLE -eq $null) { +# Write-Error "LINK_TITLE is required." +# return +# } +# if ($LINK_URL -eq $null) { +# Write-Error "LINK_URL is required." +# return +# } +# +# return ("- [" + ($LINK_SELECTED -eq $true ? "x" : " ") + "] " + (Convert-To-Markdown-PlainLink -LINK_TITLE $LINK_TITLE -LINK_URL $LINK_URL)) +#} + +<# +.SYNOPSIS + 이 함수는 연결된 이슈를 검색하고 출력 파일에 기록합니다. + +.DESCRIPTION + 이 함수는 GitHub GraphQL API를 사용하여 특정 이슈와 관련된 이슈를 검색하고, + 이를 지정된 파일에 마크다운 형식으로 기록합니다. + +.PARAMETER OWNER + 리포지토리 소유자의 이름입니다. + +.PARAMETER REPONAME + 리포지토리의 이름입니다. + +.PARAMETER issuenum + 검색할 이슈의 번호입니다. + +.PARAMETER FILENAME + 출력 파일의 이름입니다. 기본값은 'issues.md'입니다. + +.EXAMPLE + Search-And-Print-ConnectedIssues -OWNER "octocat" -REPONAME "Hello-World" -issuenum 42 -FILENAME "output.md" +#> +function Search-And-Print-ConnectedIssues { + param ( + [string]$OWNER, # 소유자 + [string]$REPONAME, # 리포지토리명 + [int]$issuenum, # 이슈번호 + [string]$FILENAME # 출력파일명 + ) + + #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + # 필수값, 기본값 설정 + if ($OWNER -eq $null) { + Write-Error "OWNER is required." + return + } + if ($REPONAME -eq $null) { + Write-Error "REPONAME is required." + return + } + if ($issuenum -eq $null) { + Write-Error "issuenum is required." + return + } + if ($FILENAME -eq $null) { + Write-Host "FILENAME is not set. Default value is 'issues.md'." + $FILENAME = "issues.md" + } + + #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + # 관련된 이슈 전체조회 + # + # + # 1. closedByPullRequestsReferences : 연결된 풀 리퀘스트 + # 2. timelineItems - ConnectedEvent : 이 이슈가 참조한 이슈 + # 3. timelineItems - ReferencedEvent : 이 이슈를 참조한 이슈 + # 4. timelineItems - CrossReferencedEvent : 이슈간에 서로 참조된 이슈 + # + $ISSUE_DETAILS_STR = gh api graphql -F owner=$OWNER -F repo=$REPONAME -F issue=$issuenum -f query=' + query ($owner: String!, $repo: String!, $issue: Int!) { + repository(owner: $owner, name: $repo) { + issue(number: $issue) { + url, + assignees(first: 100) { + nodes { + login + name + } + }, + title, + number, + closed, + closedByPullRequestsReferences(first: 100) { + nodes { + number + title + closed + closedAt + url + } + }, + participants(first: 100) { + nodes { + login + name + } + }, + timelineItems(first: 100){ + edges{ + node{ + ... on ConnectedEvent{ + source{ + ... on Issue{ + labels(first: 100){ + nodes{ + name + } + } + title + number + closed + closedAt + updatedAt + url + assignees(first: 100){ + nodes{ + login + name + } + } + } + } + } + ... on ReferencedEvent{ + subject{ + ... on Issue{ + labels(first: 100){ + nodes{ + name + } + } + title + number + closed + closedAt + updatedAt + url + assignees(first: 100){ + nodes{ + login + name + } + } + } + } + } + ... on CrossReferencedEvent{ + source{ + ... on Issue{ + labels(first: 100){ + nodes{ + name + } + } + title + number + closed + closedAt + updatedAt + url + assignees(first: 100){ + nodes{ + login + name + } + } + } + } + } + } + } + } + } + } + }' + $ISSUE_DETAILS = $ISSUE_DETAILS_STR | ConvertFrom-Json + + + #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- + # 관련된 이슈 가공, 마크다운으로 출력 + # + # + # 1. 이슈 + + (("- [" +($ISSUE_DETAILS.data.repository.issue.closed -eq "True" ? "x" : " ") + "] [" + ($ISSUE_DETAILS.data.repository.issue.title) + " #" + ($ISSUE_DETAILS.data.repository.issue.number) + "](" + ($ISSUE_DETAILS.data.repository.issue.url) + ") / " + "``" + $ISSUE_DETAILS.data.repository.issue.assignees.nodes[0].login + ":" + $ISSUE_DETAILS.data.repository.issue.assignees.nodes[0].name) + "`` ") | Out-File -FilePath $FILENAME -Append + + # 2. 풀 리퀘스트 + $ISSUE_DETAILS.data.repository.issue.closedByPullRequestsReferences.nodes | ForEach-Object { + (" - [" +($_.closed -eq "True" ? "x" : " ") + "] PULL REQUEST: [" + ($_.title) + "](" + ($_.url) + ") ") | Out-File -FilePath $FILENAME -Append + } + + # 3-1. 연결된 이슈 필터링, 'task' 라벨이 있는 이슈만 + $CONNECTED_ISSUES = $ISSUE_DETAILS.data.repository.issue.timelineItems.edges | Where-Object { + if ($null -ne $_.node.source){ + ($null -ne $_.node.source.closed) -and + ($_.node.source.number -ne $issuenum) -and + ($_.node.source.labels.nodes.name -contains "task") + } + elseif ($null -ne $_.node.subject){ + ($null -ne $_.node.subject.closed) -and + ($_.node.subject.number -ne $issuenum) -and + ($_.node.source.labels.nodes.name -contains "task") + } + } | Sort-Object -Property ($_.node.source.title) + + # 3-2. 연결된 이슈 출력 + $processedNumbers = @() + $CONNECTED_ISSUES | ForEach-Object { + $connected = $_.node.source + if ($processedNumbers -notcontains $connected.number) { + $processedNumbers += $connected.number + (" - [" +($connected.closed -eq "True" ? "x" : " ") + "] CONNECTED ISSUE: [" + ($connected.title) + " #" + ($connected.number) + "](" + ($connected.url) + ")/" + "``" + $connected.assignees.nodes[0].login + ":" + $connected.assignees.nodes[0].name) + "`` " | Out-File -FilePath $FILENAME -Append + } + } +} + + + + +######################################################################################################################## +# 나. 함수 호출부 +# +# +# +# + +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# 공통 영역 +$start = Get-Date +Write-Host started at $start.ToString("yyyy-MM-dd HH:mm:ss") + +$OWNER = "aliencube" +$REPONAME = "azure-openai-sdk-proxy" +$FILENAME = "issues.md" + +Remove-Item -Path $FILENAME -Force +New-Item -Path $FILENAME -ItemType File + + +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# 제목 +Add-Content -Path $FILENAME -Value '# 진행 현황' +Add-Content -Path $FILENAME -Value ('> 생성일자: ' + (Get-Date -Format "yyyy-MM-dd HH:mm:ss").ToString() + ' ') +Add-Content -Path $FILENAME -Value ('> 스크립트: [https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb](https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb)') + + +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# PR 현황 +Add-Content -Path $FILENAME -Value `n`n +Add-Content -Path $FILENAME -Value '## PR 현황' +gh pr list --json title,number,labels,assignees,updatedAt ` + | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/pull/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)` / updated:`\(.updatedAt)`"' ` + | Out-File -Append -FilePath $FILENAME + +Add-Content -Path $FILENAME -Value `n`n +Add-Content -Path $FILENAME -Value '## 팀별 진행현황 (updated 기준 내림차순)' + +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# 팀별 현황 +#team-kim 🔑, team-oh 🙆‍♂️, team-park 🐧 +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### team-kim 🔑' +gh issue list --json title,number,labels,assignees,updatedAt --label 'team-kim' ` + | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` + | Out-File -Append -FilePath $FILENAME + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### team-oh 🙆‍♂️' +gh issue list --json title,number,labels,assignees,updatedAt --label 'team-oh' ` + | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` + | Out-File -Append -FilePath $FILENAME + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### team-park 🐧' +gh issue list --json title,number,labels,assignees,updatedAt --label 'team-park' ` + | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` + | Out-File -Append -FilePath $FILENAME + + +#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- +# 이슈 분배 현황 +Add-Content -Path $FILENAME -Value `n`n +Add-Content -Path $FILENAME -Value '## 이슈현황' + +# EPIC ISSUE +Add-Content -Path $FILENAME -Value '### EPIC 🚀' +gh issue list --json title,number,labels,updatedAt --label 'epic' ` + | jq -s -c '.[] | sort_by(.title)' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` + | Out-File -Append -FilePath $FILENAME + +# FEATURE ISSUE +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### FEATURE ✨' +gh issue list --json title,number,labels,updatedAt --label 'feature' ` + | jq -s -c '.[] | sort_by(.title)' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` + | Out-File -Append -FilePath $FILENAME + +# STORY ISSUE +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### STORY 📖' +gh issue list --json title,number,labels,updatedAt --label 'story' ` + | jq -s -c '.[] | sort_by(.title)' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` + | Out-File -Append -FilePath $FILENAME + +# TASK ISSUE +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '### TASK' + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '#### ASSIGNED 👤' +$ASSIGNED_STR = gh issue list --assignee "*" --json number --label 'task' +$ASSIGNED = $ASSIGNED_STR | ConvertFrom-Json +$ASSIGNED.number | ForEach-Object { + $issuenum = $_ + Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME +} + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '#### NOT ASSIGNED ❓' +$UNASSIGNED_STR = gh issue list --json title,number,labels,assignees,updatedAt --label 'task' --search 'no:assignee' +$UNASSIGNED = $UNASSIGNED_STR | ConvertFrom-Json +$UNASSIGNED.number | ForEach-Object { + $issuenum = $_ + Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME +} + +# CLOSED ISSUE +Add-Content -Path $FILENAME -Value `n`n +Add-Content -Path $FILENAME -Value '### Closed 🚪' + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '#### ASSIGNED: 👤' +$CLOSEDASSIGNED_STR = gh issue list --assignee "*" --json title,number,labels,closedAt,assignees --state closed --search 'sort:closed-desc' +$CLOSEDASSIGNED = $CLOSEDASSIGNED_STR | ConvertFrom-Json +$CLOSEDASSIGNED.number | ForEach-Object { + $issuenum = $_ + Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME +} + +Add-Content -Path $FILENAME -Value '' +Add-Content -Path $FILENAME -Value '#### NOT ASSIGNED: ❓' +gh issue list --json title,number,labels,closedAt,assignees --state closed --search 'sort:closed-desc no:assignee' ` + | jq -s -c '.[] | sort_by(.closedAt) | reverse' ` + | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [x] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)` / closed:`\(.closedAt)`"' ` + | Out-File -Append -FilePath $FILENAME + +$end = Get-Date +Write-Host started at $end.ToString("yyyy-MM-dd HH:mm:ss") +Write-Host total elapsed time: $end.Subtract($start).ToString() From 372181319e71d157a4d768d54c67b90de8a6a88b Mon Sep 17 00:00:00 2001 From: tae0y Date: Wed, 11 Sep 2024 23:09:10 +0900 Subject: [PATCH 14/17] =?UTF-8?q?delete=20:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20=EB=A1=9C=EC=BB=AC=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- issues.md | 276 ---------------------------------- nowissues.ps1 | 402 -------------------------------------------------- 2 files changed, 678 deletions(-) delete mode 100644 issues.md delete mode 100644 nowissues.ps1 diff --git a/issues.md b/issues.md deleted file mode 100644 index 8db7942a..00000000 --- a/issues.md +++ /dev/null @@ -1,276 +0,0 @@ -# 진행 현황 -> 생성일자: 2024-09-10 22:14:07 -> 스크립트: [https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb](https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb) - - - -## PR 현황 -- [ ] [[Playground] Add Events components](https://github.com/aliencube/azure-openai-sdk-proxy/pull/311) / `@Capella87:Inseo Lee` / updated:`2024-09-10T08:46:16Z` -- [ ] [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/pull/292) / `@tae0y:박태영` / updated:`2024-09-10T08:02:49Z` -- [ ] [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/pull/293) / `@KYJKY:김연중` / updated:`2024-09-10T07:56:11Z` -- [ ] [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/pull/294) / `@jihyunmoon16:문지현` / updated:`2024-09-10T07:44:54Z` -- [ ] [[Admin] Table Storage Connection Setting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/299) / `@sikutisa:sikutisa` / updated:`2024-09-10T07:32:33Z` -- [ ] [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/pull/312) / `@yjchun626:YooJung Chun` / updated:`2024-09-10T04:20:17Z` -- [ ] [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/pull/263) / `@jihyunmoon16:문지현` / updated:`2024-09-07T05:06:59Z` -- [ ] [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/pull/281) / `@tae0y:박태영` / updated:`2024-09-06T12:37:16Z` -- [ ] [[Playground] 177 auth UI component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/280) / `@pmj-chosim:박민진` / updated:`2024-09-06T04:40:12Z` - - - -## 팀별 진행현황 (updated 기준 내림차순) - -### team-kim 🔑 -- [ ] [[Admin] Component: Create event details - UI component](https://github.com/aliencube/azure-openai-sdk-proxy/issues/214) / `@KYJKY:김연중` -- [ ] [[DevOps] Table Storage용 bicep 파일 만들기](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283) / `@tae0y:박태영` -- [ ] [[Backend API] Implement endpoint for create event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213) / `@tae0y:박태영` -- [ ] [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/169) / `@jihyunmoon16:문지현` -- [ ] [[Admin] Component: Navigation Top List Bar - UI component](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272) / `@n-y-kim:Nayeon Kim` -- [ ] [[Backend API] Implement endpoint for update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203) / `@SeungHuLee:Lee Seung Hu` -- [ ] [[Chat Completions] Request payload definition](https://github.com/aliencube/azure-openai-sdk-proxy/issues/21) / `@jihyunmoon16:문지현` - -### team-oh 🙆‍♂️ -- [ ] [[Playground] Refactoring `OpenAIApiClient`](https://github.com/aliencube/azure-openai-sdk-proxy/issues/163) / `@5jisoo:Lucy Oh` -- [ ] [[Playground] Component - list of events (UI only)](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181) / `@Capella87:Inseo Lee` -- [ ] [[DevOps] 깃헙 액션 워크플로우 리팩토링](https://github.com/aliencube/azure-openai-sdk-proxy/issues/264) / `@DOZAKA:BYUNGKWON DO` - -### team-park 🐧 -- [ ] [[Playground] System Message Tab: UI Component only](https://github.com/aliencube/azure-openai-sdk-proxy/issues/289) / `@yjchun626:YooJung Chun` -- [ ] [[Admin] 스토리지 커넥션 개체 생성](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300) / `@sikutisa:sikutisa` -- [ ] [[Backend API] Implement endpoint for view event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208) / `@sikutisa:sikutisa` -- [ ] [[Playground] Component for auth (UI only)](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177) / `@pmj-chosim:박민진` - - - -## 이슈현황 -### EPIC 🚀 -- [ ] [[Admin] Admin page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/7) -- [ ] [[Admin] Proxy API key](https://github.com/aliencube/azure-openai-sdk-proxy/issues/188) -- [ ] [[Playground] Playground auth with GitHub](https://github.com/aliencube/azure-openai-sdk-proxy/issues/10) -- [ ] [[Playground] Playground page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/6) - -### FEATURE ✨ -- [ ] [[Admin] Component: List of events](https://github.com/aliencube/azure-openai-sdk-proxy/issues/185) -- [ ] [[Admin] Component: New event](https://github.com/aliencube/azure-openai-sdk-proxy/issues/186) -- [ ] [[Admin] Component: Update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/196) -- [ ] [[Admin] Component: View event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/187) -- [ ] [[Admin] Landing page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/184) -- [ ] [[Admin] Navigation sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/238) -- [ ] [[Admin] Resources](https://github.com/aliencube/azure-openai-sdk-proxy/issues/302) -- [ ] [[Backend API] Add internal auth](https://github.com/aliencube/azure-openai-sdk-proxy/issues/19) -- [ ] [[Playground] Component: Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/245) -- [ ] [[Playground] List of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/173) - -### STORY 📖 -- [ ] [[Admin] Add new resource](https://github.com/aliencube/azure-openai-sdk-proxy/issues/303) -- [ ] [[Admin] Component: Create event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/211) -- [ ] [[Admin] Component: Landing Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/232) -- [ ] [[Admin] Component: List event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/216) -- [ ] [[Admin] Component: Navigation Top List Bar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/271) -- [ ] [[Admin] Component: Navigation sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/issues/239) -- [ ] [[Admin] Component: Update event details - populate event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/198) -- [ ] [[Admin] Component: Update event details - update event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/201) -- [ ] [[Admin] Component: View event details](https://github.com/aliencube/azure-openai-sdk-proxy/issues/206) -- [ ] [[Backend API] API Key generation](https://github.com/aliencube/azure-openai-sdk-proxy/issues/23) -- [ ] [[Backend API] API Key handling](https://github.com/aliencube/azure-openai-sdk-proxy/issues/24) -- [ ] [[Backend API] API Key store](https://github.com/aliencube/azure-openai-sdk-proxy/issues/25) -- [ ] [[Backend API] Add internal auth](https://github.com/aliencube/azure-openai-sdk-proxy/issues/19) -- [ ] [[Backend API] Azure Key Vault for OpenAI API keys](https://github.com/aliencube/azure-openai-sdk-proxy/issues/161) -- [ ] [[OpenAPI] OpenAPI spec](https://github.com/aliencube/azure-openai-sdk-proxy/issues/183) -- [ ] [[Playground] Component - Tab for system message and parameters](https://github.com/aliencube/azure-openai-sdk-proxy/issues/226) -- [ ] [[Playground] Component: Page](https://github.com/aliencube/azure-openai-sdk-proxy/issues/245) -- [ ] [[Playground] Event selection](https://github.com/aliencube/azure-openai-sdk-proxy/issues/178) -- [ ] [[Playground] List of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/issues/173) - -### TASK - -#### ASSIGNED 👤 -- [ ] [[OpenAPI] Add endpoint for create new admin resource details #307](https://github.com/aliencube/azure-openai-sdk-proxy/issues/307) / `o-ii:` - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for new resource details #308](https://github.com/aliencube/azure-openai-sdk-proxy/issues/308)/`:` - - [ ] CONNECTED ISSUE: [[Admin] Component - New resource details - UI only #309](https://github.com/aliencube/azure-openai-sdk-proxy/issues/309)/`:` -- [ ] [[Admin] 스토리지 커넥션 개체 생성 #300](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300) / `sikutisa:sikutisa` - - [ ] PULL REQUEST: [[Admin] Table Storage Connection Setting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/299) -- [ ] [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/issues/289) / `yjchun626:YooJung Chun` - - [ ] PULL REQUEST: [[Playground] System Message Tab: UI Component only #289](https://github.com/aliencube/azure-openai-sdk-proxy/pull/312) -- [ ] [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283) / `tae0y:박태영` - - [ ] PULL REQUEST: [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/pull/292) - - [ ] CONNECTED ISSUE: [[Admin] 스토리지 커넥션 개체 생성 #300](https://github.com/aliencube/azure-openai-sdk-proxy/issues/300)/`sikutisa:sikutisa` -- [ ] [[Admin] Component: Navigation Top List Bar - UI component #272](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272) / `n-y-kim:Nayeon Kim` -- [ ] [[DevOps] 깃헙 액션 워크플로우 리팩토링 #264](https://github.com/aliencube/azure-openai-sdk-proxy/issues/264) / `DOZAKA:BYUNGKWON DO` -- [ ] [[Backend API] Implement endpoint for list event details #218](https://github.com/aliencube/azure-openai-sdk-proxy/issues/218) / `praivesi:praivesi` -- [ ] [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/issues/214) / `KYJKY:김연중` - - [ ] PULL REQUEST: [[Admin] Component: Create event details - UI component #214](https://github.com/aliencube/azure-openai-sdk-proxy/pull/293) -- [ ] [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213) / `tae0y:박태영` - - [ ] PULL REQUEST: [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/pull/281) - - [ ] CONNECTED ISSUE: [[DevOps] Table Storage용 bicep 파일 만들기 #283](https://github.com/aliencube/azure-openai-sdk-proxy/issues/283)/`tae0y:박태영` -- [ ] [[Backend API] Implement endpoint for view event details #208](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208) / `sikutisa:sikutisa` -- [ ] [[Backend API] Implement endpoint for update event details #203](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203) / `SeungHuLee:Lee Seung Hu` - - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` -- [ ] [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181) / `Capella87:Inseo Lee` - - [ ] PULL REQUEST: [[Playground] Add Events components](https://github.com/aliencube/azure-openai-sdk-proxy/pull/311) - - [ ] CONNECTED ISSUE: [[Playground] Component - list of events - page redirection #182](https://github.com/aliencube/azure-openai-sdk-proxy/issues/182)/`:` - - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI logic only) #224](https://github.com/aliencube/azure-openai-sdk-proxy/issues/224)/`:` -- [ ] [[Playground] Component for auth (UI only) #177](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177) / `pmj-chosim:박민진` - - [ ] PULL REQUEST: [[Playground] 177 auth UI component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/280) - - [ ] CONNECTED ISSUE: [[Playground] Component for auth (UI logic only) #223](https://github.com/aliencube/azure-openai-sdk-proxy/issues/223)/`:` -- [ ] [[OpenAPI] Add endpoint for list of deployment models #169](https://github.com/aliencube/azure-openai-sdk-proxy/issues/169) / `jihyunmoon16:문지현` - - [ ] PULL REQUEST: [[OpenAPI] Add endpoint for list of deployment models](https://github.com/aliencube/azure-openai-sdk-proxy/pull/294) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list of deployment models #170](https://github.com/aliencube/azure-openai-sdk-proxy/issues/170)/`:` - - [x] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172)/`yjchun626:YooJung Chun` -- [ ] [[Playground] Refactoring `OpenAIApiClient` #163](https://github.com/aliencube/azure-openai-sdk-proxy/issues/163) / `5jisoo:Lucy Oh` -- [ ] [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/issues/21) / `jihyunmoon16:문지현` - - [ ] PULL REQUEST: [[Chat Completions] Request payload definition #21](https://github.com/aliencube/azure-openai-sdk-proxy/pull/263) - -#### NOT ASSIGNED ❓ -- [ ] [[Admin] Component - new resource details - UI logic only #310](https://github.com/aliencube/azure-openai-sdk-proxy/issues/310) / `:` -- [ ] [[Admin] Component - New resource details - UI only #309](https://github.com/aliencube/azure-openai-sdk-proxy/issues/309) / `:` - - [ ] CONNECTED ISSUE: [[Admin] Component - new resource details - UI logic only #310](https://github.com/aliencube/azure-openai-sdk-proxy/issues/310)/`:` -- [ ] [[Backend API] Implement endpoint for new resource details #308](https://github.com/aliencube/azure-openai-sdk-proxy/issues/308) / `:` -- [ ] [[Playground] Parameters Tab: UI Components only #290](https://github.com/aliencube/azure-openai-sdk-proxy/issues/290) / `:` -- [ ] [[Admin] Component: Navigation Top List Bar - UI Logic #273](https://github.com/aliencube/azure-openai-sdk-proxy/issues/273) / `:` - - [ ] CONNECTED ISSUE: [[Admin] Component: Navigation Top List Bar - UI component #272](https://github.com/aliencube/azure-openai-sdk-proxy/issues/272)/`n-y-kim:Nayeon Kim` -- [ ] [[Admin] Component: Navigation sidebar - UI component #240](https://github.com/aliencube/azure-openai-sdk-proxy/issues/240) / `:` -- [ ] [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234) / `:` - - [x] CONNECTED ISSUE: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235)/`n-y-kim:Nayeon Kim` -- [ ] [[Admin] Component: Landing Page(List) - UI component #233](https://github.com/aliencube/azure-openai-sdk-proxy/issues/233) / `:` - - [x] CONNECTED ISSUE: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235)/`n-y-kim:Nayeon Kim` -- [ ] [[Playground] Component - Tab for system message and parameters (UI logic only) #227](https://github.com/aliencube/azure-openai-sdk-proxy/issues/227) / `:` -- [ ] [[Playground] Component - list of events (UI logic only) #224](https://github.com/aliencube/azure-openai-sdk-proxy/issues/224) / `:` -- [ ] [[Playground] Component for auth (UI logic only) #223](https://github.com/aliencube/azure-openai-sdk-proxy/issues/223) / `:` -- [ ] [[Playground] Component - list of deployment models (UI logic only) #222](https://github.com/aliencube/azure-openai-sdk-proxy/issues/222) / `:` -- [ ] [[Admin] Component: List event details - UI logic #220](https://github.com/aliencube/azure-openai-sdk-proxy/issues/220) / `:` -- [ ] [[Admin] Component: Create event details - UI logic #215](https://github.com/aliencube/azure-openai-sdk-proxy/issues/215) / `:` -- [ ] [[Admin] Component: View event details - UI logic #210](https://github.com/aliencube/azure-openai-sdk-proxy/issues/210) / `:` -- [ ] [[Admin] Component: View event details - UI component #209](https://github.com/aliencube/azure-openai-sdk-proxy/issues/209) / `:` -- [ ] [[Admin] Component: Update event details - UI logic (update) #205](https://github.com/aliencube/azure-openai-sdk-proxy/issues/205) / `:` - - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` -- [ ] [[Admin] Component: Update event details - UI component (update) #204](https://github.com/aliencube/azure-openai-sdk-proxy/issues/204) / `:` - - [x] CONNECTED ISSUE: [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202)/`SeungHuLee:Lee Seung Hu` -- [ ] [[Admin] Component: Update event details - UI logic (view) #200](https://github.com/aliencube/azure-openai-sdk-proxy/issues/200) / `:` -- [ ] [[Admin] Component: Update event details - UI component (view) #199](https://github.com/aliencube/azure-openai-sdk-proxy/issues/199) / `:` -- [ ] [[Playground] Component - list of events - page redirection #182](https://github.com/aliencube/azure-openai-sdk-proxy/issues/182) / `:` -- [ ] [[Backend API] Implement endpoint for list of events #180](https://github.com/aliencube/azure-openai-sdk-proxy/issues/180) / `:` -- [ ] [[Backend API] Implementation for internal auth #176](https://github.com/aliencube/azure-openai-sdk-proxy/issues/176) / `:` -- [ ] [[Backend API] Interface design for internal auth #175](https://github.com/aliencube/azure-openai-sdk-proxy/issues/175) / `:` -- [ ] [[OpenAPI] Add security auth #174](https://github.com/aliencube/azure-openai-sdk-proxy/issues/174) / `:` -- [ ] [[Backend API] Implement endpoint for list of deployment models #170](https://github.com/aliencube/azure-openai-sdk-proxy/issues/170) / `:` -- [ ] [[AppHost] Add Azure Key Vault orchestration #165](https://github.com/aliencube/azure-openai-sdk-proxy/issues/165) / `:` - - [x] CONNECTED ISSUE: [[AppHost] Add bicep for Key Vault #193](https://github.com/aliencube/azure-openai-sdk-proxy/issues/193)/`justinyoo:Justin Yoo` - - - -### Closed 🚪 - -#### ASSIGNED: 👤 -- [x] [[Admin] Add test report to GitHub Actions #189](https://github.com/aliencube/azure-openai-sdk-proxy/issues/189) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [Generate test report](https://github.com/aliencube/azure-openai-sdk-proxy/pull/190) -- [x] [[Backend API] Builder pattern that returns `OpenAISettings` #166](https://github.com/aliencube/azure-openai-sdk-proxy/issues/166) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [Add `OpenAISettingsBuilder`](https://github.com/aliencube/azure-openai-sdk-proxy/pull/191) -- [x] [[AppHost] Add bicep for Key Vault #193](https://github.com/aliencube/azure-openai-sdk-proxy/issues/193) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [Add bicep files for Key Vault](https://github.com/aliencube/azure-openai-sdk-proxy/pull/194) -- [x] [[Backend API] Add Key Vault client #195](https://github.com/aliencube/azure-openai-sdk-proxy/issues/195) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [Add Key Vault client](https://github.com/aliencube/azure-openai-sdk-proxy/pull/197) -- [x] [[OpenAPI] Add endpoint for view event details #207](https://github.com/aliencube/azure-openai-sdk-proxy/issues/207) / `juhangil:Hangil Ju` - - [x] PULL REQUEST: [[OpenAPI] Add endpoint for view event details #207](https://github.com/aliencube/azure-openai-sdk-proxy/pull/231) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for view event details #208](https://github.com/aliencube/azure-openai-sdk-proxy/issues/208)/`sikutisa:sikutisa` - - [ ] CONNECTED ISSUE: [[Admin] Component: View event details - UI logic #210](https://github.com/aliencube/azure-openai-sdk-proxy/issues/210)/`:` -- [x] [[Backend API] Review current OpenAPI doc for linting #20](https://github.com/aliencube/azure-openai-sdk-proxy/issues/20) / `tae0y:박태영` - - [x] PULL REQUEST: [Add spectral rules #20](https://github.com/aliencube/azure-openai-sdk-proxy/pull/229) - - [x] CONNECTED ISSUE: [[GitHub Actions] Add OpenAPI linting #221](https://github.com/aliencube/azure-openai-sdk-proxy/issues/221)/`sikutisa:sikutisa` -- [x] [[Playground/Admin] Add Fluent UI Nuget package #251](https://github.com/aliencube/azure-openai-sdk-proxy/issues/251) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin/Playground] Add NuGet package for Fluent UI](https://github.com/aliencube/azure-openai-sdk-proxy/pull/253) -- [x] [[Playground/Admin] Display sidebar only at the admin page #252](https://github.com/aliencube/azure-openai-sdk-proxy/issues/252) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin/Playground] Update main layout to show/hide the sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/pull/254) -- [x] [[Playground/Admin] Add Fluent UI library #250](https://github.com/aliencube/azure-openai-sdk-proxy/issues/250) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin/Playground] Add NuGet package for Fluent UI](https://github.com/aliencube/azure-openai-sdk-proxy/pull/253) - - [x] PULL REQUEST: [[Admin/Playground] Update main layout to show/hide the sidebar](https://github.com/aliencube/azure-openai-sdk-proxy/pull/254) -- [x] [[DevOps] Add testing scripts that run on local machine #256](https://github.com/aliencube/azure-openai-sdk-proxy/issues/256) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[DevOps] Add test scripts to run locally](https://github.com/aliencube/azure-openai-sdk-proxy/pull/258) -- [x] [[DevOps] Update local test scripts #269](https://github.com/aliencube/azure-openai-sdk-proxy/issues/269) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[DevOps] Update test scripts](https://github.com/aliencube/azure-openai-sdk-proxy/pull/270) -- [x] [[OpenAPI] Add endpoint for list event details #217](https://github.com/aliencube/azure-openai-sdk-proxy/issues/217) / `tae0y:박태영` - - [x] PULL REQUEST: [[OpenAPI] Add endpoint for list event details #217](https://github.com/aliencube/azure-openai-sdk-proxy/pull/265) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list event details #218](https://github.com/aliencube/azure-openai-sdk-proxy/issues/218)/`praivesi:praivesi` - - [ ] CONNECTED ISSUE: [[Admin] Component: List event details - UI logic #220](https://github.com/aliencube/azure-openai-sdk-proxy/issues/220)/`:` -- [x] [[GitHub Actions] Add OpenAPI linting #221](https://github.com/aliencube/azure-openai-sdk-proxy/issues/221) / `sikutisa:sikutisa` - - [x] PULL REQUEST: [[Devops] Feature/221 add openapi linting](https://github.com/aliencube/azure-openai-sdk-proxy/pull/243) -- [x] [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/issues/235) / `n-y-kim:Nayeon Kim` - - [x] PULL REQUEST: [[Admin] Component: Landing Page(Page) #235](https://github.com/aliencube/azure-openai-sdk-proxy/pull/242) -- [x] [[Playground] Component: Page component #246](https://github.com/aliencube/azure-openai-sdk-proxy/issues/246) / `5jisoo:Lucy Oh` - - [x] PULL REQUEST: [[Playground] Component: Page component #246](https://github.com/aliencube/azure-openai-sdk-proxy/pull/249) - - [x] CONNECTED ISSUE: [[Playground] Playground page layout #288](https://github.com/aliencube/azure-openai-sdk-proxy/issues/288)/`justinyoo:Justin Yoo` -- [x] [[OpenAPI] Add endpoint for update event details #202](https://github.com/aliencube/azure-openai-sdk-proxy/issues/202) / `SeungHuLee:Lee Seung Hu` - - [x] PULL REQUEST: [[OpenAPI] Add endpoint for update event details](https://github.com/aliencube/azure-openai-sdk-proxy/pull/241) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for update event details #203](https://github.com/aliencube/azure-openai-sdk-proxy/issues/203)/`SeungHuLee:Lee Seung Hu` -- [x] [[OpenAPI] Add endpoint for create event details #212](https://github.com/aliencube/azure-openai-sdk-proxy/issues/212) / `DOZAKA:BYUNGKWON DO` - - [x] PULL REQUEST: [[OpenAPI] Add endpoint for create event details #212](https://github.com/aliencube/azure-openai-sdk-proxy/pull/261) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for create event details #213](https://github.com/aliencube/azure-openai-sdk-proxy/issues/213)/`tae0y:박태영` - - [ ] CONNECTED ISSUE: [[Admin] Component: Create event details - UI logic #215](https://github.com/aliencube/azure-openai-sdk-proxy/issues/215)/`:` - - [ ] CONNECTED ISSUE: [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234)/`:` -- [x] [[OpenAPI] Add endpoint for list of events #179](https://github.com/aliencube/azure-openai-sdk-proxy/issues/179) / `Capella87:Inseo Lee` - - [x] PULL REQUEST: [ [OpenAPI] Add endpoint for list of events #179](https://github.com/aliencube/azure-openai-sdk-proxy/pull/259) - - [ ] CONNECTED ISSUE: [[Backend API] Implement endpoint for list of events #180](https://github.com/aliencube/azure-openai-sdk-proxy/issues/180)/`:` - - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181)/`Capella87:Inseo Lee` - - [ ] CONNECTED ISSUE: [[Admin] Component: Landing Page(List) - UI logic #234](https://github.com/aliencube/azure-openai-sdk-proxy/issues/234)/`:` -- [x] [[DevOps] 테스트 케이스 수정 - 랜덤 실패 조건 확인 #279](https://github.com/aliencube/azure-openai-sdk-proxy/issues/279) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [Update tests to ensure apps are up and running](https://github.com/aliencube/azure-openai-sdk-proxy/pull/278) -- [x] [[Playground] Component - Tab for system message and parameters (UI only) #225](https://github.com/aliencube/azure-openai-sdk-proxy/issues/225) / `5jisoo:Lucy Oh` - - [x] PULL REQUEST: [[Playground] Component - Tab for system message and parameters (UI only) #225](https://github.com/aliencube/azure-openai-sdk-proxy/pull/244) - - [ ] CONNECTED ISSUE: [[Playground] Component - Tab for system message and parameters (UI logic only) #227](https://github.com/aliencube/azure-openai-sdk-proxy/issues/227)/`:` -- [x] [[Backend API] Refactor OpenAPI doc version to `appsettings.json` #267](https://github.com/aliencube/azure-openai-sdk-proxy/issues/267) / `sikutisa:sikutisa` - - [x] PULL REQUEST: [[Backend API]Refactor OpenAPI doc version to appsettings.json](https://github.com/aliencube/azure-openai-sdk-proxy/pull/274) - - [x] CONNECTED ISSUE: [[DevOps] Update local test scripts #269](https://github.com/aliencube/azure-openai-sdk-proxy/issues/269)/`justinyoo:Justin Yoo` -- [x] [[Admin] 어드민 이벤트용 서비스레이어 정의 #284](https://github.com/aliencube/azure-openai-sdk-proxy/issues/284) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin] Add admin event service layer](https://github.com/aliencube/azure-openai-sdk-proxy/pull/286) -- [x] [[Playground] Playground page layout #288](https://github.com/aliencube/azure-openai-sdk-proxy/issues/288) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Playground] playground page layout](https://github.com/aliencube/azure-openai-sdk-proxy/pull/291) -- [x] [[Admin] Page Component - new event #295](https://github.com/aliencube/azure-openai-sdk-proxy/issues/295) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin] Add new event page](https://github.com/aliencube/azure-openai-sdk-proxy/pull/296) -- [x] [[Playground] Component - button to display a given input #171](https://github.com/aliencube/azure-openai-sdk-proxy/issues/171) / `o-ii:` - - [x] PULL REQUEST: [[Playground] Component - button to display a given input #171](https://github.com/aliencube/azure-openai-sdk-proxy/pull/236) - - [x] PULL REQUEST: [Update debug button component](https://github.com/aliencube/azure-openai-sdk-proxy/pull/297) - - [x] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172)/`yjchun626:YooJung Chun` - - [ ] CONNECTED ISSUE: [[Playground] Component for auth (UI only) #177](https://github.com/aliencube/azure-openai-sdk-proxy/issues/177)/`pmj-chosim:박민진` - - [ ] CONNECTED ISSUE: [[Playground] Component - list of events (UI only) #181](https://github.com/aliencube/azure-openai-sdk-proxy/issues/181)/`Capella87:Inseo Lee` -- [x] [[Admin] 어드민용 리포지토리 레이어 정의 #285](https://github.com/aliencube/azure-openai-sdk-proxy/issues/285) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin] Add repository layer for admin events](https://github.com/aliencube/azure-openai-sdk-proxy/pull/287) -- [x] [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/issues/172) / `yjchun626:YooJung Chun` - - [x] PULL REQUEST: [[Playground] Component - list of deployment models (UI only) #172](https://github.com/aliencube/azure-openai-sdk-proxy/pull/260) - - [ ] CONNECTED ISSUE: [[Playground] Component - list of deployment models (UI logic only) #222](https://github.com/aliencube/azure-openai-sdk-proxy/issues/222)/`:` -- [x] [[Chat Completions] Response payload definition #22](https://github.com/aliencube/azure-openai-sdk-proxy/issues/22) / `jhmin99:Jihong Min` - - [x] PULL REQUEST: [[Chat Completions] Response payload definition #22 (backup)](https://github.com/aliencube/azure-openai-sdk-proxy/pull/298) -- [x] [[Admin] Resource details entity #304](https://github.com/aliencube/azure-openai-sdk-proxy/issues/304) / `justinyoo:Justin Yoo` - - [x] PULL REQUEST: [[Admin] Add admin resource details entity](https://github.com/aliencube/azure-openai-sdk-proxy/pull/306) -- [x] [[Admin] Component: List event details - UI component #219](https://github.com/aliencube/azure-openai-sdk-proxy/issues/219) / `praivesi:praivesi` - - [x] PULL REQUEST: [[Admin] Component: List event details - UI component #219](https://github.com/aliencube/azure-openai-sdk-proxy/pull/266) - -#### NOT ASSIGNED: ❓ -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/54) / `@null:null` / closed:`2024-07-20T05:16:41Z` -- [x] [과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/53) / `@null:null` / closed:`2024-07-19T14:55:35Z` -- [x] [재제출_과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/52) / `@null:null` / closed:`2024-07-19T14:44:07Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/51) / `@null:null` / closed:`2024-07-19T13:01:19Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/50) / `@null:null` / closed:`2024-07-19T12:44:00Z` -- [x] [과제 완료 인증_정유진](https://github.com/aliencube/azure-openai-sdk-proxy/issues/49) / `@null:null` / closed:`2024-07-19T12:31:56Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/48) / `@null:null` / closed:`2024-07-19T12:17:18Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/47) / `@null:null` / closed:`2024-07-19T11:29:54Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/46) / `@null:null` / closed:`2024-07-19T10:06:31Z` -- [x] [OSSCA 1st 과제 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/44) / `@null:null` / closed:`2024-07-19T09:39:35Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/45) / `@null:null` / closed:`2024-07-19T08:23:18Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/43) / `@null:null` / closed:`2024-07-19T08:03:07Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/42) / `@null:null` / closed:`2024-07-19T06:55:25Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/41) / `@null:null` / closed:`2024-07-19T03:18:32Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/39) / `@null:null` / closed:`2024-07-19T03:16:41Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/40) / `@null:null` / closed:`2024-07-19T03:13:36Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/38) / `@null:null` / closed:`2024-07-18T21:34:31Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/37) / `@null:null` / closed:`2024-07-18T20:51:22Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/36) / `@null:null` / closed:`2024-07-18T16:47:24Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/35) / `@null:null` / closed:`2024-07-18T14:49:30Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/34) / `@null:null` / closed:`2024-07-17T18:07:41Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/33) / `@null:null` / closed:`2024-07-17T11:42:16Z` -- [x] [과제 완료 인증](https://github.com/aliencube/azure-openai-sdk-proxy/issues/32) / `@null:null` / closed:`2024-07-17T08:34:38Z` -- [x] [AOAI SDK to the latest](https://github.com/aliencube/azure-openai-sdk-proxy/issues/16) / `@null:null` / closed:`2024-06-02T04:54:11Z` -- [x] [OpenAPI docs](https://github.com/aliencube/azure-openai-sdk-proxy/issues/11) / `@null:null` / closed:`2023-12-05T16:53:42Z` -- [x] [Get access code by GitHub alias](https://github.com/aliencube/azure-openai-sdk-proxy/issues/13) / `@null:null` / closed:`2023-12-05T13:45:39Z` -- [x] [Get all event access codes](https://github.com/aliencube/azure-openai-sdk-proxy/issues/5) / `@null:null` / closed:`2023-12-05T13:45:38Z` -- [x] [Get event by ID](https://github.com/aliencube/azure-openai-sdk-proxy/issues/4) / `@null:null` / closed:`2023-12-05T09:28:19Z` -- [x] [Get all events](https://github.com/aliencube/azure-openai-sdk-proxy/issues/3) / `@null:null` / closed:`2023-12-05T09:28:18Z` -- [x] [Create event](https://github.com/aliencube/azure-openai-sdk-proxy/issues/2) / `@null:null` / closed:`2023-12-05T09:28:17Z` diff --git a/nowissues.ps1 b/nowissues.ps1 deleted file mode 100644 index d645ea6c..00000000 --- a/nowissues.ps1 +++ /dev/null @@ -1,402 +0,0 @@ -######################################################################################################################## -# 스크립트 구조 -# 가. 함수 정의부 -# 나. 함수 호출부 -# -# - - -######################################################################################################################## -# 가. 함수 정의부 -# -# -# -# - -#function Convert-To-Markdown-PlainLink { -# param ( -# [string]$LINK_TITLE, # 링크명 -# [string]$LINK_URL # 링크URL -# ) -# -# if ($null -eq $LINK_TITLE) { -# Write-Error "LINK_TITLE is required." -# return -# } -# if ($null -eq $LINK_URL) { -# Write-Error "LINK_URL is required." -# return -# } -# -# return ("[" + $LINK_TITLE + "](" + $LINK_URL + ")") -#} -# -#function Convert-To-Markdown-SelectBoxLink { -# param ( -# [string]$LINK_SELECTED, # 선택여부 -# [string]$LINK_TITLE, # 링크명 -# [string]$LINK_URL # 링크URL -# ) -# if ($LINK_SELECTED -eq $null) { -# Write-Error "LINK_SELECTED is required." -# return -# } -# if ($LINK_TITLE -eq $null) { -# Write-Error "LINK_TITLE is required." -# return -# } -# if ($LINK_URL -eq $null) { -# Write-Error "LINK_URL is required." -# return -# } -# -# return ("- [" + ($LINK_SELECTED -eq $true ? "x" : " ") + "] " + (Convert-To-Markdown-PlainLink -LINK_TITLE $LINK_TITLE -LINK_URL $LINK_URL)) -#} - -<# -.SYNOPSIS - 이 함수는 연결된 이슈를 검색하고 출력 파일에 기록합니다. - -.DESCRIPTION - 이 함수는 GitHub GraphQL API를 사용하여 특정 이슈와 관련된 이슈를 검색하고, - 이를 지정된 파일에 마크다운 형식으로 기록합니다. - -.PARAMETER OWNER - 리포지토리 소유자의 이름입니다. - -.PARAMETER REPONAME - 리포지토리의 이름입니다. - -.PARAMETER issuenum - 검색할 이슈의 번호입니다. - -.PARAMETER FILENAME - 출력 파일의 이름입니다. 기본값은 'issues.md'입니다. - -.EXAMPLE - Search-And-Print-ConnectedIssues -OWNER "octocat" -REPONAME "Hello-World" -issuenum 42 -FILENAME "output.md" -#> -function Search-And-Print-ConnectedIssues { - param ( - [string]$OWNER, # 소유자 - [string]$REPONAME, # 리포지토리명 - [int]$issuenum, # 이슈번호 - [string]$FILENAME # 출력파일명 - ) - - #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - # 필수값, 기본값 설정 - if ($OWNER -eq $null) { - Write-Error "OWNER is required." - return - } - if ($REPONAME -eq $null) { - Write-Error "REPONAME is required." - return - } - if ($issuenum -eq $null) { - Write-Error "issuenum is required." - return - } - if ($FILENAME -eq $null) { - Write-Host "FILENAME is not set. Default value is 'issues.md'." - $FILENAME = "issues.md" - } - - #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - # 관련된 이슈 전체조회 - # - # - # 1. closedByPullRequestsReferences : 연결된 풀 리퀘스트 - # 2. timelineItems - ConnectedEvent : 이 이슈가 참조한 이슈 - # 3. timelineItems - ReferencedEvent : 이 이슈를 참조한 이슈 - # 4. timelineItems - CrossReferencedEvent : 이슈간에 서로 참조된 이슈 - # - $ISSUE_DETAILS_STR = gh api graphql -F owner=$OWNER -F repo=$REPONAME -F issue=$issuenum -f query=' - query ($owner: String!, $repo: String!, $issue: Int!) { - repository(owner: $owner, name: $repo) { - issue(number: $issue) { - url, - assignees(first: 100) { - nodes { - login - name - } - }, - title, - number, - closed, - closedByPullRequestsReferences(first: 100) { - nodes { - number - title - closed - closedAt - url - } - }, - participants(first: 100) { - nodes { - login - name - } - }, - timelineItems(first: 100){ - edges{ - node{ - ... on ConnectedEvent{ - source{ - ... on Issue{ - labels(first: 100){ - nodes{ - name - } - } - title - number - closed - closedAt - updatedAt - url - assignees(first: 100){ - nodes{ - login - name - } - } - } - } - } - ... on ReferencedEvent{ - subject{ - ... on Issue{ - labels(first: 100){ - nodes{ - name - } - } - title - number - closed - closedAt - updatedAt - url - assignees(first: 100){ - nodes{ - login - name - } - } - } - } - } - ... on CrossReferencedEvent{ - source{ - ... on Issue{ - labels(first: 100){ - nodes{ - name - } - } - title - number - closed - closedAt - updatedAt - url - assignees(first: 100){ - nodes{ - login - name - } - } - } - } - } - } - } - } - } - } - }' - $ISSUE_DETAILS = $ISSUE_DETAILS_STR | ConvertFrom-Json - - - #-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- - # 관련된 이슈 가공, 마크다운으로 출력 - # - # - # 1. 이슈 - - (("- [" +($ISSUE_DETAILS.data.repository.issue.closed -eq "True" ? "x" : " ") + "] [" + ($ISSUE_DETAILS.data.repository.issue.title) + " #" + ($ISSUE_DETAILS.data.repository.issue.number) + "](" + ($ISSUE_DETAILS.data.repository.issue.url) + ") / " + "``" + $ISSUE_DETAILS.data.repository.issue.assignees.nodes[0].login + ":" + $ISSUE_DETAILS.data.repository.issue.assignees.nodes[0].name) + "`` ") | Out-File -FilePath $FILENAME -Append - - # 2. 풀 리퀘스트 - $ISSUE_DETAILS.data.repository.issue.closedByPullRequestsReferences.nodes | ForEach-Object { - (" - [" +($_.closed -eq "True" ? "x" : " ") + "] PULL REQUEST: [" + ($_.title) + "](" + ($_.url) + ") ") | Out-File -FilePath $FILENAME -Append - } - - # 3-1. 연결된 이슈 필터링, 'task' 라벨이 있는 이슈만 - $CONNECTED_ISSUES = $ISSUE_DETAILS.data.repository.issue.timelineItems.edges | Where-Object { - if ($null -ne $_.node.source){ - ($null -ne $_.node.source.closed) -and - ($_.node.source.number -ne $issuenum) -and - ($_.node.source.labels.nodes.name -contains "task") - } - elseif ($null -ne $_.node.subject){ - ($null -ne $_.node.subject.closed) -and - ($_.node.subject.number -ne $issuenum) -and - ($_.node.source.labels.nodes.name -contains "task") - } - } | Sort-Object -Property ($_.node.source.title) - - # 3-2. 연결된 이슈 출력 - $processedNumbers = @() - $CONNECTED_ISSUES | ForEach-Object { - $connected = $_.node.source - if ($processedNumbers -notcontains $connected.number) { - $processedNumbers += $connected.number - (" - [" +($connected.closed -eq "True" ? "x" : " ") + "] CONNECTED ISSUE: [" + ($connected.title) + " #" + ($connected.number) + "](" + ($connected.url) + ")/" + "``" + $connected.assignees.nodes[0].login + ":" + $connected.assignees.nodes[0].name) + "`` " | Out-File -FilePath $FILENAME -Append - } - } -} - - - - -######################################################################################################################## -# 나. 함수 호출부 -# -# -# -# - -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# 공통 영역 -$start = Get-Date -Write-Host started at $start.ToString("yyyy-MM-dd HH:mm:ss") - -$OWNER = "aliencube" -$REPONAME = "azure-openai-sdk-proxy" -$FILENAME = "issues.md" - -Remove-Item -Path $FILENAME -Force -New-Item -Path $FILENAME -ItemType File - - -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# 제목 -Add-Content -Path $FILENAME -Value '# 진행 현황' -Add-Content -Path $FILENAME -Value ('> 생성일자: ' + (Get-Date -Format "yyyy-MM-dd HH:mm:ss").ToString() + ' ') -Add-Content -Path $FILENAME -Value ('> 스크립트: [https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb](https://gist.github.com/tae0y/6ca6fbab44ba60d72934cbbc107a06bb)') - - -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# PR 현황 -Add-Content -Path $FILENAME -Value `n`n -Add-Content -Path $FILENAME -Value '## PR 현황' -gh pr list --json title,number,labels,assignees,updatedAt ` - | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/pull/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)` / updated:`\(.updatedAt)`"' ` - | Out-File -Append -FilePath $FILENAME - -Add-Content -Path $FILENAME -Value `n`n -Add-Content -Path $FILENAME -Value '## 팀별 진행현황 (updated 기준 내림차순)' - -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# 팀별 현황 -#team-kim 🔑, team-oh 🙆‍♂️, team-park 🐧 -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### team-kim 🔑' -gh issue list --json title,number,labels,assignees,updatedAt --label 'team-kim' ` - | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` - | Out-File -Append -FilePath $FILENAME - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### team-oh 🙆‍♂️' -gh issue list --json title,number,labels,assignees,updatedAt --label 'team-oh' ` - | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` - | Out-File -Append -FilePath $FILENAME - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### team-park 🐧' -gh issue list --json title,number,labels,assignees,updatedAt --label 'team-park' ` - | jq -s -c '.[] | sort_by(.updatedAt) | reverse' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)`"' ` - | Out-File -Append -FilePath $FILENAME - - -#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- -# 이슈 분배 현황 -Add-Content -Path $FILENAME -Value `n`n -Add-Content -Path $FILENAME -Value '## 이슈현황' - -# EPIC ISSUE -Add-Content -Path $FILENAME -Value '### EPIC 🚀' -gh issue list --json title,number,labels,updatedAt --label 'epic' ` - | jq -s -c '.[] | sort_by(.title)' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` - | Out-File -Append -FilePath $FILENAME - -# FEATURE ISSUE -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### FEATURE ✨' -gh issue list --json title,number,labels,updatedAt --label 'feature' ` - | jq -s -c '.[] | sort_by(.title)' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` - | Out-File -Append -FilePath $FILENAME - -# STORY ISSUE -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### STORY 📖' -gh issue list --json title,number,labels,updatedAt --label 'story' ` - | jq -s -c '.[] | sort_by(.title)' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [ ] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number))"' ` - | Out-File -Append -FilePath $FILENAME - -# TASK ISSUE -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '### TASK' - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '#### ASSIGNED 👤' -$ASSIGNED_STR = gh issue list --assignee "*" --json number --label 'task' -$ASSIGNED = $ASSIGNED_STR | ConvertFrom-Json -$ASSIGNED.number | ForEach-Object { - $issuenum = $_ - Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME -} - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '#### NOT ASSIGNED ❓' -$UNASSIGNED_STR = gh issue list --json title,number,labels,assignees,updatedAt --label 'task' --search 'no:assignee' -$UNASSIGNED = $UNASSIGNED_STR | ConvertFrom-Json -$UNASSIGNED.number | ForEach-Object { - $issuenum = $_ - Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME -} - -# CLOSED ISSUE -Add-Content -Path $FILENAME -Value `n`n -Add-Content -Path $FILENAME -Value '### Closed 🚪' - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '#### ASSIGNED: 👤' -$CLOSEDASSIGNED_STR = gh issue list --assignee "*" --json title,number,labels,closedAt,assignees --state closed --search 'sort:closed-desc' -$CLOSEDASSIGNED = $CLOSEDASSIGNED_STR | ConvertFrom-Json -$CLOSEDASSIGNED.number | ForEach-Object { - $issuenum = $_ - Search-And-Print-ConnectedIssues -OWNER $OWNER -REPONAME $REPONAME -issuenum $issuenum -FILENAME $FILENAME -} - -Add-Content -Path $FILENAME -Value '' -Add-Content -Path $FILENAME -Value '#### NOT ASSIGNED: ❓' -gh issue list --json title,number,labels,closedAt,assignees --state closed --search 'sort:closed-desc no:assignee' ` - | jq -s -c '.[] | sort_by(.closedAt) | reverse' ` - | jq -r --arg OWNER $OWNER --arg REPONAME $REPONAME '.[] | "- [x] [\(.title)](https://github.com/\($OWNER)/\($REPONAME)/issues/\(.number)) / `@\(.assignees[0].login):\(.assignees[0].name)` / closed:`\(.closedAt)`"' ` - | Out-File -Append -FilePath $FILENAME - -$end = Get-Date -Write-Host started at $end.ToString("yyyy-MM-dd HH:mm:ss") -Write-Host total elapsed time: $end.Subtract($start).ToString() From 172629ce8a81a1ddc84350e116f9ca20d050e2fd Mon Sep 17 00:00:00 2001 From: tae0y Date: Fri, 13 Sep 2024 23:49:59 +0900 Subject: [PATCH 15/17] =?UTF-8?q?update=20:=20storage-account.bicep=20?= =?UTF-8?q?=EB=82=B4=EB=B6=80=EC=97=90=EC=84=9C=20=EC=97=B0=EA=B2=B0?= =?UTF-8?q?=EB=AC=B8=EC=9E=90=EC=97=B4=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++++-- infra/aspire.bicep | 22 +--------------------- infra/core/storage/storage-account.bicep | 10 ++++++++++ 3 files changed, 15 insertions(+), 23 deletions(-) diff --git a/README.md b/README.md index 24ccee90..5166fce8 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,8 @@ This provides a proxy server application of Azure OpenAI Service API that round- -g $AZURE_RESOURCE_GROUP \ --template-file ./infra/aspire.bicep \ --parameters environmentName=$AZURE_ENV_NAME \ - --parameters location=$AZURE_LOCATION + --parameters location=$AZURE_LOCATION \ + --parameters tableNames=events,tests # PowerShell $AZURE_RESOURCE_GROUP = "rg-$AZURE_ENV_NAME" @@ -83,7 +84,8 @@ This provides a proxy server application of Azure OpenAI Service API that round- -g $AZURE_RESOURCE_GROUP ` --template-file ./infra/aspire.bicep ` --parameters environmentName=$AZURE_ENV_NAME ` - --parameters location=$AZURE_LOCATION + --parameters location=$AZURE_LOCATION ` + --parameters tableNames=events,tests ``` ## Unit Testing & Integration Testing & Linting OpenAPI Document diff --git a/infra/aspire.bicep b/infra/aspire.bicep index 148c1895..e0f2712d 100644 --- a/infra/aspire.bicep +++ b/infra/aspire.bicep @@ -78,27 +78,7 @@ module storageAccount './core/storage/storage-account.bicep' = { } } -resource storageAccountReference 'Microsoft.Storage/storageAccounts@2023-01-01' existing = { - name: !empty(storageAccountName) ? storageAccountName : '${abbrs.storageStorageAccounts}${resourceToken}' -} - -// Provision Key Vault Secret -module keyVaultSecrets './core/security/keyvault-secret.bicep' = { - name: 'keyVaultSecrets' - params: { - keyVaultName: keyVault.outputs.name - tags: tags - name: 'storage-connection-string' - secretValue: 'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storageAccount.name};AccountKey=${storageAccountReference.listKeys().keys[0].value};BlobEndpoint=${storageAccount.outputs.primaryEndpoints.blob};FileEndpoint=${storageAccount.outputs.primaryEndpoints.file};QueueEndpoint=${storageAccount.outputs.primaryEndpoints.queue};TableEndpoint=${storageAccount.outputs.primaryEndpoints.table}' - } - - dependsOn: [ - storageAccount - keyVault - ] -} - -// TODO: Role Assignment for Key Vault secret : creator admin, apiapp user +// TODO: Key vault Secret 권한부여, 생성한 사람에게 관리자 권한을, 그 외에는 secret user 권한을 부여 //resource keyVaultSecretRoleAssignment 'Microsoft.Authorization/roleAssignments@2020-04-01-preview' = { // name: guid(resourceGroup().id, resolvedKeyVaultName, 'secret-role-assignment') // properties: { diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index e8a609e8..9a2fab4a 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -103,6 +103,16 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { } } +// Save Storage Account Connection String in Key Vault Secret +module keyVaultSecrets '../../core/security/keyvault-secret.bicep' = { + name: 'keyVaultSecrets' + params: { + name: 'storage-connection-string' + secretValue:'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storage.name};AccountKey=${storage.listKeys().keys[0].value};BlobEndpoint=${storage.properties.primaryEndpoints.blob};FileEndpoint=${storage.properties.primaryEndpoints.file};QueueEndpoint=${storage.properties.primaryEndpoints.queue};TableEndpoint=${storage.properties.primaryEndpoints.table}' + keyVaultName:keyVaultName + } +} + output id string = storage.id output name string = storage.name output primaryEndpoints object = storage.properties.primaryEndpoints From 1c3af3a1f2910c4b3c98a95e2fd2b303ebaa668f Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 14 Sep 2024 00:33:54 +0900 Subject: [PATCH 16/17] =?UTF-8?q?update=20:=20storage=20connection=20strin?= =?UTF-8?q?g=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- infra/core/storage/storage-account.bicep | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index 9a2fab4a..7794f483 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -107,7 +107,7 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { module keyVaultSecrets '../../core/security/keyvault-secret.bicep' = { name: 'keyVaultSecrets' params: { - name: 'storage-connection-string' + name: 'Storage' secretValue:'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storage.name};AccountKey=${storage.listKeys().keys[0].value};BlobEndpoint=${storage.properties.primaryEndpoints.blob};FileEndpoint=${storage.properties.primaryEndpoints.file};QueueEndpoint=${storage.properties.primaryEndpoints.queue};TableEndpoint=${storage.properties.primaryEndpoints.table}' keyVaultName:keyVaultName } From ffc44c377e4184a87e4f1bf79685306ecefad889 Mon Sep 17 00:00:00 2001 From: tae0y Date: Sat, 14 Sep 2024 11:08:00 +0900 Subject: [PATCH 17/17] =?UTF-8?q?update=20:=20storage=20connection=20strin?= =?UTF-8?q?g=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 ++---- infra/core/storage/storage-account.bicep | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 5166fce8..24ccee90 100644 --- a/README.md +++ b/README.md @@ -74,8 +74,7 @@ This provides a proxy server application of Azure OpenAI Service API that round- -g $AZURE_RESOURCE_GROUP \ --template-file ./infra/aspire.bicep \ --parameters environmentName=$AZURE_ENV_NAME \ - --parameters location=$AZURE_LOCATION \ - --parameters tableNames=events,tests + --parameters location=$AZURE_LOCATION # PowerShell $AZURE_RESOURCE_GROUP = "rg-$AZURE_ENV_NAME" @@ -84,8 +83,7 @@ This provides a proxy server application of Azure OpenAI Service API that round- -g $AZURE_RESOURCE_GROUP ` --template-file ./infra/aspire.bicep ` --parameters environmentName=$AZURE_ENV_NAME ` - --parameters location=$AZURE_LOCATION ` - --parameters tableNames=events,tests + --parameters location=$AZURE_LOCATION ``` ## Unit Testing & Integration Testing & Linting OpenAPI Document diff --git a/infra/core/storage/storage-account.bicep b/infra/core/storage/storage-account.bicep index 7794f483..9a2fab4a 100644 --- a/infra/core/storage/storage-account.bicep +++ b/infra/core/storage/storage-account.bicep @@ -107,7 +107,7 @@ resource storage 'Microsoft.Storage/storageAccounts@2023-01-01' = { module keyVaultSecrets '../../core/security/keyvault-secret.bicep' = { name: 'keyVaultSecrets' params: { - name: 'Storage' + name: 'storage-connection-string' secretValue:'DefaultEndpointsProtocol=https;EndpointSuffix=${environment().suffixes.storage};AccountName=${storage.name};AccountKey=${storage.listKeys().keys[0].value};BlobEndpoint=${storage.properties.primaryEndpoints.blob};FileEndpoint=${storage.properties.primaryEndpoints.file};QueueEndpoint=${storage.properties.primaryEndpoints.queue};TableEndpoint=${storage.properties.primaryEndpoints.table}' keyVaultName:keyVaultName }