diff --git a/.github/runner.bicep b/.github/runner.bicep deleted file mode 100644 index 254fef276..000000000 --- a/.github/runner.bicep +++ /dev/null @@ -1,869 +0,0 @@ -@description('The name of you Virtual Machine.') -param utcValue string = utcNow() -param vmName string = toLower('github-runner-${uniqueString(resourceGroup().id, utcValue)}') - -@description('Username for the Virtual Machine.') -param adminUsername string = 'ubuntu' - -@description('SSH Key value for the Virtual Machine.') -@secure() -param adminPasswordOrKey string - -@description('The Ubuntu version for the VM. This will pick a fully patched image of this given Ubuntu version.') -param ubuntuOSVersion string = 'ubuntu-pro-gen1' -param ubuntuOffer string = 'ubuntu-24_04-lts' - -@description('Location for all resources.') -param location string = resourceGroup().location - -@description('The size of the VM') -@allowed([ - 'Standard_B1ls' - 'Standard_B1ms' - 'Standard_B1s' - 'Standard_B2ms' - 'Standard_B2s' - 'Standard_B4ms' - 'Standard_B8ms' - 'Standard_B12ms' - 'Standard_B16ms' - 'Standard_B20ms' - 'Standard_DS1_v2' - 'Standard_DS2_v2' - 'Standard_DS3_v2' - 'Standard_DS4_v2' - 'Standard_DS5_v2' - 'Standard_DS11-1_v2' - 'Standard_DS11_v2' - 'Standard_DS12-1_v2' - 'Standard_DS12-2_v2' - 'Standard_DS12_v2' - 'Standard_DS13-2_v2' - 'Standard_DS13-4_v2' - 'Standard_DS13_v2' - 'Standard_DS14-4_v2' - 'Standard_DS14-8_v2' - 'Standard_DS14_v2' - 'Standard_DS15_v2' - 'Standard_DS2_v2_Promo' - 'Standard_DS3_v2_Promo' - 'Standard_DS4_v2_Promo' - 'Standard_DS5_v2_Promo' - 'Standard_DS11_v2_Promo' - 'Standard_DS12_v2_Promo' - 'Standard_DS13_v2_Promo' - 'Standard_DS14_v2_Promo' - 'Standard_F1s' - 'Standard_F2s' - 'Standard_F4s' - 'Standard_F8s' - 'Standard_F16s' - 'Standard_D2s_v3' - 'Standard_D4s_v3' - 'Standard_D8s_v3' - 'Standard_D16s_v3' - 'Standard_D32s_v3' - 'Standard_E2_v4' - 'Standard_E4_v4' - 'Standard_E8_v4' - 'Standard_E16_v4' - 'Standard_E20_v4' - 'Standard_E32_v4' - 'Standard_E2d_v4' - 'Standard_E4d_v4' - 'Standard_E8d_v4' - 'Standard_E16d_v4' - 'Standard_E20d_v4' - 'Standard_E32d_v4' - 'Standard_E2s_v4' - 'Standard_E4-2s_v4' - 'Standard_E4s_v4' - 'Standard_E8-2s_v4' - 'Standard_E8-4s_v4' - 'Standard_E8s_v4' - 'Standard_E16-4s_v4' - 'Standard_E16-8s_v4' - 'Standard_E16s_v4' - 'Standard_E20s_v4' - 'Standard_E32-8s_v4' - 'Standard_E32-16s_v4' - 'Standard_E32s_v4' - 'Standard_E2ds_v4' - 'Standard_E4-2ds_v4' - 'Standard_E4ds_v4' - 'Standard_E8-2ds_v4' - 'Standard_E8-4ds_v4' - 'Standard_E8ds_v4' - 'Standard_E16-4ds_v4' - 'Standard_E16-8ds_v4' - 'Standard_E16ds_v4' - 'Standard_E20ds_v4' - 'Standard_E32-8ds_v4' - 'Standard_E32-16ds_v4' - 'Standard_E32ds_v4' - 'Standard_D2d_v4' - 'Standard_D4d_v4' - 'Standard_D8d_v4' - 'Standard_D16d_v4' - 'Standard_D32d_v4' - 'Standard_D48d_v4' - 'Standard_D64d_v4' - 'Standard_D2_v4' - 'Standard_D4_v4' - 'Standard_D8_v4' - 'Standard_D16_v4' - 'Standard_D32_v4' - 'Standard_D48_v4' - 'Standard_D64_v4' - 'Standard_D2ds_v4' - 'Standard_D4ds_v4' - 'Standard_D8ds_v4' - 'Standard_D16ds_v4' - 'Standard_D32ds_v4' - 'Standard_D48ds_v4' - 'Standard_D64ds_v4' - 'Standard_D2s_v4' - 'Standard_D4s_v4' - 'Standard_D8s_v4' - 'Standard_D16s_v4' - 'Standard_D32s_v4' - 'Standard_D48s_v4' - 'Standard_D64s_v4' - 'Standard_D1_v2' - 'Standard_D2_v2' - 'Standard_D3_v2' - 'Standard_D4_v2' - 'Standard_D5_v2' - 'Standard_D11_v2' - 'Standard_D12_v2' - 'Standard_D13_v2' - 'Standard_D14_v2' - 'Standard_D15_v2' - 'Standard_D2_v2_Promo' - 'Standard_D3_v2_Promo' - 'Standard_D4_v2_Promo' - 'Standard_D5_v2_Promo' - 'Standard_D11_v2_Promo' - 'Standard_D12_v2_Promo' - 'Standard_D13_v2_Promo' - 'Standard_D14_v2_Promo' - 'Standard_F1' - 'Standard_F2' - 'Standard_F4' - 'Standard_F8' - 'Standard_F16' - 'Standard_A1_v2' - 'Standard_A2m_v2' - 'Standard_A2_v2' - 'Standard_A4m_v2' - 'Standard_A4_v2' - 'Standard_A8m_v2' - 'Standard_A8_v2' - 'Standard_D2_v3' - 'Standard_D4_v3' - 'Standard_D8_v3' - 'Standard_D16_v3' - 'Standard_D32_v3' - 'Standard_D48_v3' - 'Standard_D64_v3' - 'Standard_D48s_v3' - 'Standard_D64s_v3' - 'Standard_E2_v3' - 'Standard_E4_v3' - 'Standard_E8_v3' - 'Standard_E16_v3' - 'Standard_E20_v3' - 'Standard_E32_v3' - 'Standard_E2s_v3' - 'Standard_E4-2s_v3' - 'Standard_E4s_v3' - 'Standard_E8-2s_v3' - 'Standard_E8-4s_v3' - 'Standard_E8s_v3' - 'Standard_E16-4s_v3' - 'Standard_E16-8s_v3' - 'Standard_E16s_v3' - 'Standard_E20s_v3' - 'Standard_E32-8s_v3' - 'Standard_E32-16s_v3' - 'Standard_E32s_v3' - 'Standard_F2s_v2' - 'Standard_F4s_v2' - 'Standard_F8s_v2' - 'Standard_F16s_v2' - 'Standard_F32s_v2' - 'Standard_F48s_v2' - 'Standard_F64s_v2' - 'Standard_F72s_v2' - 'Standard_DC2as_v5' - 'Standard_DC4as_v5' - 'Standard_DC8as_v5' - 'Standard_DC16as_v5' - 'Standard_DC32as_v5' - 'Standard_DC48as_v5' - 'Standard_DC64as_v5' - 'Standard_DC96as_v5' - 'Standard_DC2ads_v5' - 'Standard_DC4ads_v5' - 'Standard_DC8ads_v5' - 'Standard_DC16ads_v5' - 'Standard_DC32ads_v5' - 'Standard_DC48ads_v5' - 'Standard_DC64ads_v5' - 'Standard_DC96ads_v5' - 'Standard_EC2as_v5' - 'Standard_EC4as_v5' - 'Standard_EC8as_v5' - 'Standard_EC16as_v5' - 'Standard_EC20as_v5' - 'Standard_EC32as_v5' - 'Standard_EC48as_v5' - 'Standard_EC64as_v5' - 'Standard_EC96as_v5' - 'Standard_EC96ias_v5' - 'Standard_EC2ads_v5' - 'Standard_EC4ads_v5' - 'Standard_EC8ads_v5' - 'Standard_EC16ads_v5' - 'Standard_EC20ads_v5' - 'Standard_EC32ads_v5' - 'Standard_EC48ads_v5' - 'Standard_EC64ads_v5' - 'Standard_EC96ads_v5' - 'Standard_EC96iads_v5' - 'Standard_D2a_v4' - 'Standard_D4a_v4' - 'Standard_D8a_v4' - 'Standard_D16a_v4' - 'Standard_D32a_v4' - 'Standard_D48a_v4' - 'Standard_D64a_v4' - 'Standard_D96a_v4' - 'Standard_D2as_v4' - 'Standard_D4as_v4' - 'Standard_D8as_v4' - 'Standard_D16as_v4' - 'Standard_D32as_v4' - 'Standard_D48as_v4' - 'Standard_D64as_v4' - 'Standard_D96as_v4' - 'Standard_E2a_v4' - 'Standard_E4a_v4' - 'Standard_E8a_v4' - 'Standard_E16a_v4' - 'Standard_E20a_v4' - 'Standard_E32a_v4' - 'Standard_E48a_v4' - 'Standard_E64a_v4' - 'Standard_E96a_v4' - 'Standard_E2as_v4' - 'Standard_E4-2as_v4' - 'Standard_E4as_v4' - 'Standard_E8-2as_v4' - 'Standard_E8-4as_v4' - 'Standard_E8as_v4' - 'Standard_E16-4as_v4' - 'Standard_E16-8as_v4' - 'Standard_E16as_v4' - 'Standard_E20as_v4' - 'Standard_E32-8as_v4' - 'Standard_E32-16as_v4' - 'Standard_E32as_v4' - 'Standard_E48as_v4' - 'Standard_E64-16as_v4' - 'Standard_E64-32as_v4' - 'Standard_E64as_v4' - 'Standard_E96-24as_v4' - 'Standard_E96-48as_v4' - 'Standard_E96as_v4' - 'Standard_E96ias_v4' - 'Standard_E48_v3' - 'Standard_E64_v3' - 'Standard_E48s_v3' - 'Standard_E64-16s_v3' - 'Standard_E64-32s_v3' - 'Standard_E64s_v3' - 'Standard_A0' - 'Standard_A1' - 'Standard_A2' - 'Standard_A3' - 'Standard_A5' - 'Standard_A4' - 'Standard_A6' - 'Standard_A7' - 'Basic_A0' - 'Basic_A1' - 'Basic_A2' - 'Basic_A3' - 'Basic_A4' - 'Standard_D2ds_v5' - 'Standard_D4ds_v5' - 'Standard_D8ds_v5' - 'Standard_D16ds_v5' - 'Standard_D32ds_v5' - 'Standard_D48ds_v5' - 'Standard_D64ds_v5' - 'Standard_D96ds_v5' - 'Standard_D2d_v5' - 'Standard_D4d_v5' - 'Standard_D8d_v5' - 'Standard_D16d_v5' - 'Standard_D32d_v5' - 'Standard_D48d_v5' - 'Standard_D64d_v5' - 'Standard_D96d_v5' - 'Standard_D2s_v5' - 'Standard_D4s_v5' - 'Standard_D8s_v5' - 'Standard_D16s_v5' - 'Standard_D32s_v5' - 'Standard_D48s_v5' - 'Standard_D64s_v5' - 'Standard_D96s_v5' - 'Standard_D2_v5' - 'Standard_D4_v5' - 'Standard_D8_v5' - 'Standard_D16_v5' - 'Standard_D32_v5' - 'Standard_D48_v5' - 'Standard_D64_v5' - 'Standard_D96_v5' - 'Standard_E48ds_v4' - 'Standard_E64-16ds_v4' - 'Standard_E64-32ds_v4' - 'Standard_E64ds_v4' - 'Standard_E2ds_v5' - 'Standard_E4-2ds_v5' - 'Standard_E4ds_v5' - 'Standard_E8-2ds_v5' - 'Standard_E8-4ds_v5' - 'Standard_E8ds_v5' - 'Standard_E16-4ds_v5' - 'Standard_E16-8ds_v5' - 'Standard_E16ds_v5' - 'Standard_E20ds_v5' - 'Standard_E32-8ds_v5' - 'Standard_E32-16ds_v5' - 'Standard_E32ds_v5' - 'Standard_E48ds_v5' - 'Standard_E64-16ds_v5' - 'Standard_E64-32ds_v5' - 'Standard_E64ds_v5' - 'Standard_E96-24ds_v5' - 'Standard_E96-48ds_v5' - 'Standard_E96ds_v5' - 'Standard_E104ids_v5' - 'Standard_E48d_v4' - 'Standard_E64d_v4' - 'Standard_E2d_v5' - 'Standard_E4d_v5' - 'Standard_E8d_v5' - 'Standard_E16d_v5' - 'Standard_E20d_v5' - 'Standard_E32d_v5' - 'Standard_E48d_v5' - 'Standard_E64d_v5' - 'Standard_E96d_v5' - 'Standard_E104id_v5' - 'Standard_E48s_v4' - 'Standard_E64-16s_v4' - 'Standard_E64-32s_v4' - 'Standard_E64s_v4' - 'Standard_E2s_v5' - 'Standard_E4-2s_v5' - 'Standard_E4s_v5' - 'Standard_E8-2s_v5' - 'Standard_E8-4s_v5' - 'Standard_E8s_v5' - 'Standard_E16-4s_v5' - 'Standard_E16-8s_v5' - 'Standard_E16s_v5' - 'Standard_E20s_v5' - 'Standard_E32-8s_v5' - 'Standard_E32-16s_v5' - 'Standard_E32s_v5' - 'Standard_E48s_v5' - 'Standard_E64-16s_v5' - 'Standard_E64-32s_v5' - 'Standard_E64s_v5' - 'Standard_E96-24s_v5' - 'Standard_E96-48s_v5' - 'Standard_E96s_v5' - 'Standard_E104is_v5' - 'Standard_E48_v4' - 'Standard_E64_v4' - 'Standard_E2_v5' - 'Standard_E4_v5' - 'Standard_E8_v5' - 'Standard_E16_v5' - 'Standard_E20_v5' - 'Standard_E32_v5' - 'Standard_E48_v5' - 'Standard_E64_v5' - 'Standard_E96_v5' - 'Standard_E104i_v5' - 'Standard_E2bs_v5' - 'Standard_E4bs_v5' - 'Standard_E8bs_v5' - 'Standard_E16bs_v5' - 'Standard_E32bs_v5' - 'Standard_E48bs_v5' - 'Standard_E64bs_v5' - 'Standard_E2bds_v5' - 'Standard_E4bds_v5' - 'Standard_E8bds_v5' - 'Standard_E16bds_v5' - 'Standard_E32bds_v5' - 'Standard_E48bds_v5' - 'Standard_E64bds_v5' - 'Standard_D2as_v5' - 'Standard_D4as_v5' - 'Standard_D8as_v5' - 'Standard_D16as_v5' - 'Standard_D32as_v5' - 'Standard_D48as_v5' - 'Standard_D64as_v5' - 'Standard_D96as_v5' - 'Standard_D2ads_v5' - 'Standard_D4ads_v5' - 'Standard_D8ads_v5' - 'Standard_D16ads_v5' - 'Standard_D32ads_v5' - 'Standard_D48ads_v5' - 'Standard_D64ads_v5' - 'Standard_E64i_v3' - 'Standard_E64is_v3' - 'Standard_M208ms_v2' - 'Standard_M208s_v2' - 'Standard_M416-208s_v2' - 'Standard_M416s_v2' - 'Standard_M416-208ms_v2' - 'Standard_M416ms_v2' - 'Standard_D1' - 'Standard_D2' - 'Standard_D3' - 'Standard_D4' - 'Standard_D11' - 'Standard_D12' - 'Standard_D13' - 'Standard_D14' - 'Standard_NV6' - 'Standard_NV12' - 'Standard_NV24' - 'Standard_NV6_Promo' - 'Standard_NV12_Promo' - 'Standard_NV24_Promo' - 'Standard_L8s_v3' - 'Standard_L16s_v3' - 'Standard_L32s_v3' - 'Standard_L48s_v3' - 'Standard_L64s_v3' - 'Standard_L80s_v3' - 'Standard_NC4as_T4_v3' - 'Standard_NC8as_T4_v3' - 'Standard_NC16as_T4_v3' - 'Standard_NC64as_T4_v3' - 'Standard_NV6s_v2' - 'Standard_NV12s_v2' - 'Standard_NV24s_v2' - 'Standard_NV12s_v3' - 'Standard_NV24s_v3' - 'Standard_NV48s_v3' - 'Standard_M64' - 'Standard_M64m' - 'Standard_M128' - 'Standard_M128m' - 'Standard_M8-2ms' - 'Standard_M8-4ms' - 'Standard_M8ms' - 'Standard_M16-4ms' - 'Standard_M16-8ms' - 'Standard_M16ms' - 'Standard_M32-8ms' - 'Standard_M32-16ms' - 'Standard_M32ls' - 'Standard_M32ms' - 'Standard_M32ts' - 'Standard_M64-16ms' - 'Standard_M64-32ms' - 'Standard_M64ls' - 'Standard_M64ms' - 'Standard_M64s' - 'Standard_M128-32ms' - 'Standard_M128-64ms' - 'Standard_M128ms' - 'Standard_M128s' - 'Standard_M32ms_v2' - 'Standard_M64ms_v2' - 'Standard_M64s_v2' - 'Standard_M128ms_v2' - 'Standard_M128s_v2' - 'Standard_M192ims_v2' - 'Standard_M192is_v2' - 'Standard_M32dms_v2' - 'Standard_M64dms_v2' - 'Standard_M64ds_v2' - 'Standard_M128dms_v2' - 'Standard_M128ds_v2' - 'Standard_M192idms_v2' - 'Standard_M192ids_v2' - 'Standard_HB120-16rs_v2' - 'Standard_HB120-32rs_v2' - 'Standard_HB120-64rs_v2' - 'Standard_HB120-96rs_v2' - 'Standard_HB120rs_v2' - 'Standard_D2plds_v5' - 'Standard_D4plds_v5' - 'Standard_D8plds_v5' - 'Standard_D16plds_v5' - 'Standard_D32plds_v5' - 'Standard_D48plds_v5' - 'Standard_D64plds_v5' - 'Standard_D2pls_v5' - 'Standard_D4pls_v5' - 'Standard_D8pls_v5' - 'Standard_D16pls_v5' - 'Standard_D32pls_v5' - 'Standard_D48pls_v5' - 'Standard_D64pls_v5' - 'Standard_D2pds_v5' - 'Standard_D4pds_v5' - 'Standard_D8pds_v5' - 'Standard_D16pds_v5' - 'Standard_D32pds_v5' - 'Standard_D48pds_v5' - 'Standard_D64pds_v5' - 'Standard_D2ps_v5' - 'Standard_D4ps_v5' - 'Standard_D8ps_v5' - 'Standard_D16ps_v5' - 'Standard_D32ps_v5' - 'Standard_D48ps_v5' - 'Standard_D64ps_v5' - 'Standard_E2pds_v5' - 'Standard_E4pds_v5' - 'Standard_E8pds_v5' - 'Standard_E16pds_v5' - 'Standard_E20pds_v5' - 'Standard_E32pds_v5' - 'Standard_E2ps_v5' - 'Standard_E4ps_v5' - 'Standard_E8ps_v5' - 'Standard_E16ps_v5' - 'Standard_E20ps_v5' - 'Standard_E32ps_v5' - 'Standard_L8as_v3' - 'Standard_L16as_v3' - 'Standard_L32as_v3' - 'Standard_L48as_v3' - 'Standard_L64as_v3' - 'Standard_L80as_v3' - 'Standard_E2as_v5' - 'Standard_E4-2as_v5' - 'Standard_E4as_v5' - 'Standard_E8-2as_v5' - 'Standard_E8-4as_v5' - 'Standard_E8as_v5' - 'Standard_E16-4as_v5' - 'Standard_E16-8as_v5' - 'Standard_E16as_v5' - 'Standard_E20as_v5' - 'Standard_E32-8as_v5' - 'Standard_E32-16as_v5' - 'Standard_E32as_v5' - 'Standard_E48as_v5' - 'Standard_E64-16as_v5' - 'Standard_E64-32as_v5' - 'Standard_E64as_v5' - 'Standard_E96-24as_v5' - 'Standard_E96-48as_v5' - 'Standard_E96as_v5' - 'Standard_D96ads_v5' - 'Standard_E2ads_v5' - 'Standard_E4-2ads_v5' - 'Standard_E4ads_v5' - 'Standard_E8-2ads_v5' - 'Standard_E8-4ads_v5' - 'Standard_E8ads_v5' - 'Standard_E16-4ads_v5' - 'Standard_E16-8ads_v5' - 'Standard_E16ads_v5' - 'Standard_E20ads_v5' - 'Standard_E32-8ads_v5' - 'Standard_E32-16ads_v5' - 'Standard_E32ads_v5' - 'Standard_E48ads_v5' - 'Standard_E64-16ads_v5' - 'Standard_E64-32ads_v5' - 'Standard_E64ads_v5' - 'Standard_E96-24ads_v5' - 'Standard_E96-48ads_v5' - 'Standard_E96ads_v5' - 'Standard_NC6s_v2' - 'Standard_NC12s_v2' - 'Standard_NC24rs_v2' - 'Standard_NC24s_v2' - 'Standard_E80is_v4' - 'Standard_E80ids_v4' - 'Standard_NC6' - 'Standard_NC12' - 'Standard_NC24' - 'Standard_NC24r' - 'Standard_NC6_Promo' - 'Standard_NC12_Promo' - 'Standard_NC24_Promo' - 'Standard_NC24r_Promo' - 'Standard_DS1' - 'Standard_DS2' - 'Standard_DS3' - 'Standard_DS4' - 'Standard_DS11' - 'Standard_DS12' - 'Standard_DS13' - 'Standard_DS14' - 'Standard_L8s_v2' - 'Standard_L16s_v2' - 'Standard_L32s_v2' - 'Standard_L48s_v2' - 'Standard_L64s_v2' - 'Standard_L80s_v2' - 'Standard_DC8_v2' - 'Standard_DC1s_v2' - 'Standard_DC2s_v2' - 'Standard_DC4s_v2' - 'Standard_ND40rs_v2' - 'Standard_FX4mds' - 'Standard_FX12mds' - 'Standard_FX24mds' - 'Standard_FX36mds' - 'Standard_FX48mds' - 'Standard_E112ias_v5' - 'Standard_E112iads_v5' - 'Standard_NP10s' - 'Standard_NP20s' - 'Standard_NP40s' - 'Standard_NC6s_v3' - 'Standard_NC12s_v3' - 'Standard_NC24rs_v3' - 'Standard_NC24s_v3' - 'Standard_DC1s_v3' - 'Standard_DC2s_v3' - 'Standard_DC4s_v3' - 'Standard_DC8s_v3' - 'Standard_DC16s_v3' - 'Standard_DC24s_v3' - 'Standard_DC32s_v3' - 'Standard_DC48s_v3' - 'Standard_DC1ds_v3' - 'Standard_DC2ds_v3' - 'Standard_DC4ds_v3' - 'Standard_DC8ds_v3' - 'Standard_DC16ds_v3' - 'Standard_DC24ds_v3' - 'Standard_DC32ds_v3' - 'Standard_DC48ds_v3' - 'Standard_NV4as_v4' - 'Standard_NV8as_v4' - 'Standard_NV16as_v4' - 'Standard_NV32as_v4' - 'Standard_NC24ads_A100_v4' - 'Standard_NC48ads_A100_v4' - 'Standard_NC96ads_A100_v4' - 'Standard_ND96amsr_A100_v4' - 'Standard_HB120-16rs_v3' - 'Standard_HB120-32rs_v3' - 'Standard_HB120-64rs_v3' - 'Standard_HB120-96rs_v3' - 'Standard_HB120rs_v3' - 'Standard_H8' - 'Standard_H8_Promo' - 'Standard_H16' - 'Standard_H16_Promo' - 'Standard_H8m' - 'Standard_H8m_Promo' - 'Standard_H16m' - 'Standard_H16m_Promo' - 'Standard_H16r' - 'Standard_H16r_Promo' - 'Standard_H16mr' - 'Standard_H16mr_Promo' - 'Standard_HC44-16rs' - 'Standard_HC44-32rs' - 'Standard_HC44rs' - 'Standard_ND6s' - 'Standard_ND12s' - 'Standard_ND24rs' - 'Standard_ND24s' - 'Standard_NV6ads_A10_v5' - 'Standard_NV12ads_A10_v5' - 'Standard_NV18ads_A10_v5' - 'Standard_NV36adms_A10_v5' - 'Standard_NV36ads_A10_v5' - 'Standard_NV72ads_A10_v5' - 'Standard_DC2s' - 'Standard_DC4s' - 'Standard_PB6s' - 'Standard_HB60-15rs' - 'Standard_HB60-30rs' - 'Standard_HB60-45rs' - 'Standard_HB60rs' - 'Standard_ND96asr_v4' - 'Standard_ND40s_v3' -]) -// $0.252/hr in West US 3; 4 vCPU, 32 GiB RAM, Memory optimized -param vmSize string = 'Standard_E4as_v4' -param osDiskType string = 'Premium_LRS' - -@description('Name of the VNET') -param virtualNetworkName string = '${vmName}-vNet' - -@description('Name of the subnet in the virtual network') -param subnetName string = '${vmName}-Subnet' - -@description('Name of the Network Security Group') -param networkSecurityGroupName string = '${vmName}-SecGroupNet' - -var publicIPAddressName = '${vmName}-PublicIP' -var networkInterfaceName = '${vmName}-NetInt' -var subnetAddressPrefix = '10.1.0.0/24' -var addressPrefix = '10.1.0.0/16' -var linuxConfiguration = { - disablePasswordAuthentication: true - ssh: { - publicKeys: [ - { - path: '/home/${adminUsername}/.ssh/authorized_keys' - keyData: adminPasswordOrKey - } - ] - } -} - -resource nic 'Microsoft.Network/networkInterfaces@2021-05-01' = { - name: networkInterfaceName - location: location - properties: { - ipConfigurations: [ - { - name: 'ipconfig1' - properties: { - subnet: { - id: subnet.id - } - privateIPAllocationMethod: 'Dynamic' - publicIPAddress: { - id: publicIP.id - } - } - } - ] - networkSecurityGroup: { - id: nsg.id - } - } -} - -resource nsg 'Microsoft.Network/networkSecurityGroups@2021-05-01' = { - // checkov:skip=CKV_AZURE_10:We need unrestricted ssh access - name: networkSecurityGroupName - location: location - properties: { - securityRules: [ - { - name: 'SSH' - properties: { - priority: 1000 - protocol: 'Tcp' - access: 'Allow' - direction: 'Inbound' - sourceAddressPrefix: '*' - sourcePortRange: '*' - destinationAddressPrefix: '*' - destinationPortRange: '22' - } - } - ] - } -} - -resource vnet 'Microsoft.Network/virtualNetworks@2021-05-01' = { - name: virtualNetworkName - location: location - properties: { - addressSpace: { - addressPrefixes: [ - addressPrefix - ] - } - } -} - -resource subnet 'Microsoft.Network/virtualNetworks/subnets@2021-05-01' = { - parent: vnet - name: subnetName - properties: { - addressPrefix: subnetAddressPrefix - privateEndpointNetworkPolicies: 'Enabled' - privateLinkServiceNetworkPolicies: 'Enabled' - } -} - -resource publicIP 'Microsoft.Network/publicIPAddresses@2021-05-01' = { - name: publicIPAddressName - location: location - sku: { - name: 'Basic' - } - properties: { - deleteOption: 'Delete' - publicIPAllocationMethod: 'Dynamic' - publicIPAddressVersion: 'IPv4' - dnsSettings: { - domainNameLabel: vmName - } - idleTimeoutInMinutes: 4 - } -} - -resource vm 'Microsoft.Compute/virtualMachines@2021-11-01' = { - // checkov:skip=CKV_AZURE_151:This an ephemeral Linux VM, no need fo rencryption - // checkov:skip=CKV_AZURE_97:This an ephemeral Linux VM, no need fo rencryption - name: vmName - location: location - properties: { - hardwareProfile: { - vmSize: vmSize - } - storageProfile: { - osDisk: { - createOption: 'FromImage' - deleteOption: 'Delete' - managedDisk: { - storageAccountType: osDiskType - } - } - imageReference: { - publisher: 'Canonical' - offer: ubuntuOffer - sku: ubuntuOSVersion - version: 'latest' - } - } - networkProfile: { - networkInterfaces: [ - { - id: nic.id - } - ] - } - osProfile: { - allowExtensionOperations: false - computerName: vmName - adminUsername: adminUsername - adminPassword: adminPasswordOrKey - linuxConfiguration: linuxConfiguration - } - } -} - -output sshUserAtHostname string = '${adminUsername}@${publicIP.properties.dnsSettings.fqdn}' diff --git a/.github/workflows/runtime-upgrade.yml b/.github/workflows/runtime-upgrade.yml index 26bdd55ce..cf7518715 100644 --- a/.github/workflows/runtime-upgrade.yml +++ b/.github/workflows/runtime-upgrade.yml @@ -9,8 +9,9 @@ permissions: read-all env: RUNNER_VM_NAME: "${{ github.event.repository.name }}-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" - RESOURCE_GROUP: "${{ github.event.repository.name }}-$GITHUB_RUN_ID-attempt-$GITHUB_RUN_ATTEMPT" - AZ_LOCATION: "westus3" + LINODE_REGION: "us-ord" + # Shared CPU, Linode 32 GB, 8 vCPU, disk: 640 GB, 0.288 $/hr + LINODE_VM_SIZE: "g6-standard-8" jobs: setup: @@ -21,6 +22,7 @@ jobs: rpc_url: ${{ steps.testnet-env.outputs.rpc_url || steps.mainnet-env.outputs.rpc_url }} https_rpc_url: ${{ steps.testnet-env.outputs.https_rpc_url || steps.mainnet-env.outputs.https_rpc_url }} release_tag: ${{ steps.testnet-env.outputs.release_tag || steps.mainnet-env.outputs.release_tag }} + snapshot_container: ${{ steps.testnet-env.outputs.snapshot_container || steps.mainnet-env.outputs.snapshot_container }} artifact_name: ${{ steps.testnet-env.outputs.artifact_name || steps.mainnet-env.outputs.artifact_name }} last_block_hash: ${{ steps.last-block-info.outputs.last_block_hash }} last_block_number: ${{ steps.last-block-info.outputs.last_block_number }} @@ -46,6 +48,7 @@ jobs: echo "https_rpc_url=https://rpc.cc3-testnet.creditcoin.network/rpc" >> "$GITHUB_OUTPUT" RELEASE_TAG=$(.github/extract-release-tag.sh "testnet") echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT" + echo "snapshot_container=cc3-testnet" >> "$GITHUB_OUTPUT" echo "artifact_name=creditcoin-$RELEASE_TAG-$(uname -m)-unknown-linux-gnu.zip" >> "$GITHUB_OUTPUT" - name: Mainnet ENV @@ -59,6 +62,7 @@ jobs: echo "https_rpc_url=https://rpc.cc3-mainnet.creditcoin.network/rpc" >> "$GITHUB_OUTPUT" RELEASE_TAG=$(.github/extract-release-tag.sh "mainnet") echo "release_tag=$RELEASE_TAG" >> "$GITHUB_OUTPUT" + echo "snapshot_container=cc3-mainnet" >> "$GITHUB_OUTPUT" echo "artifact_name=creditcoin-$RELEASE_TAG-$(uname -m)-unknown-linux-gnu.zip" >> "$GITHUB_OUTPUT" - name: Store last block info @@ -151,7 +155,7 @@ jobs: - setup - deploy-github-runner runs-on: - [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + [self-hosted, "workflow-${{ github.run_id }}", "type-runtime-upgrade"] steps: - name: Grant everyone permissions on /mnt @@ -165,7 +169,7 @@ jobs: - live-sync-creditcoin - deploy-github-runner runs-on: - [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + [self-hosted, "workflow-${{ github.run_id }}", "type-runtime-upgrade"] steps: - uses: actions/checkout@v4 @@ -207,7 +211,7 @@ jobs: --bootnodes "${{ needs.setup.outputs.boot_node }}" \ --prometheus-external \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ - --base-path /mnt \ + --base-path /mnt/data \ --public-addr "/dns4/$IP_ADDRESS/tcp/50555" \ --port 50555 >creditcoin3-node-used-for-fork.log 2>&1 & @@ -254,13 +258,38 @@ jobs: - setup-self-hosted - deploy-github-runner runs-on: - [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + [self-hosted, "workflow-${{ github.run_id }}", "type-runtime-upgrade"] steps: - uses: actions/checkout@v4 with: lfs: true + - name: Install azure-cli + run: | + sudo apt remove azure-cli -y && sudo apt autoremove -y + curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash + sudo apt install -y jq + az version + + - name: Download latest chain snapshot for ${{ needs.setup.outputs.snapshot_container }} + working-directory: /mnt + run: | + df -h + + az login --service-principal --username "${{ secrets.AZURE_APP_ID }}" --password "${{ secrets.AZURE_APP_PASSWORD }}" --tenant "${{ secrets.AZURE_TENANT_ID }}" + az account set --subscription "Prod Subscription" + + LATEST_SNAPSHOT=$(az storage blob list --auth-mode=login --account-name=snapshotexportaccount --container-name=${{ needs.setup.outputs.snapshot_container }} | jq -r ".[].name" | tail -n1) + echo "INFO: latest snapshot=$LATEST_SNAPSHOT" + + az storage blob download --auth-mode=login --account-name=snapshotexportaccount --container-name=${{ needs.setup.outputs.snapshot_container }} --name "$LATEST_SNAPSHOT" --file ./snapshot.zip + + ls -lh ./snapshot.zip + unzip ./snapshot.zip && rm ./snapshot.zip + + df -h + - name: Download creditcoin3-node for release ${{ needs.setup.outputs.release_tag }} uses: i3h/download-release-asset@v1 with: @@ -289,7 +318,7 @@ jobs: --prometheus-external --pruning archive \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ --public-addr "/dns4/$IP_ADDRESS/tcp/50555" \ - --base-path /mnt \ + --base-path /mnt/data \ --port 50555 >creditcoin3-node-initial-live-sync.log 2>&1 & - name: Wait for creditcoin3-node to sync past block number ${{ needs.setup.outputs.last_block_number }} @@ -323,7 +352,8 @@ jobs: - fork-creditcoin - deploy-github-runner runs-on: - [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + [self-hosted, "workflow-${{ github.run_id }}", "type-runtime-upgrade"] + steps: - uses: actions/checkout@v4 with: @@ -346,7 +376,7 @@ jobs: ./target/release/creditcoin3-node --version ./target/release/creditcoin3-node --chain ./creditcoin-fork.json --validator --alice --pruning archive \ - --base-path /mnt >creditcoin3-node-with-forked-chain.log 2>&1 & + --base-path /mnt/fork-data >creditcoin3-node-with-forked-chain.log 2>&1 & - name: Wait for blockchain to start run: | @@ -448,7 +478,8 @@ jobs: - live-sync-creditcoin - deploy-github-runner runs-on: - [self-hosted, "${{ needs.deploy-github-runner.outputs.runner_vm_name }}"] + [self-hosted, "workflow-${{ github.run_id }}", "type-runtime-upgrade"] + steps: - uses: actions/checkout@v4 with: @@ -474,7 +505,7 @@ jobs: --validator --pruning archive \ --prometheus-external \ --telemetry-url "wss://telemetry.creditcoin.network/submit/ 0" \ - --base-path /mnt >creditcoin3-node-disconnected-live-node.log 2>&1 & + --base-path /mnt/data >creditcoin3-node-disconnected-live-node.log 2>&1 & - name: Wait for blockchain to start run: | @@ -577,75 +608,46 @@ jobs: killall -9 creditcoin3-node deploy-github-runner: - runs-on: ubuntu-24.04 - outputs: - runner_vm_name: ${{ steps.get-env.outputs.runner_vm_name }} - resource_group: ${{ steps.get-env.outputs.resource_group }} + strategy: + fail-fast: false + matrix: + include: + - proxy_type: runtime-upgrade + name: deploy-github-runner / type=${{ matrix.proxy_type }} + runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v4 with: lfs: true - - name: Install azure-cli + # See https://github.com/actions/runner/issues/1879#issuecomment-1123196869 + - name: Create matrix.txt run: | - sudo apt remove azure-cli -y && sudo apt autoremove -y - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - sudo apt install -y jq - az version - - - name: Authorize hosted-runner - run: | - mkdir -p ~/.ssh/ - ssh-keygen -q -t rsa -N '' -f ~/.ssh/id_rsa - cat ~/.ssh/id_rsa.pub >> .github/authorized_keys + echo "proxy=type=${{ matrix.proxy_type }}" > matrix.txt - name: Evaluate env vars id: get-env run: | + HASH_VALUE=$(echo "${{ hashFiles('matrix.txt') }}" | cut -c1-7) + rm matrix.txt + # WARNING: using env.RUNNER_VM_NAME directly in job outputs above # doesn't evaluate the $GITHUB_RUN_ID reference - echo "runner_vm_name=${{ env.RUNNER_VM_NAME }}" >> "$GITHUB_OUTPUT" - echo "resource_group=${{ env.RESOURCE_GROUP }}" >> "$GITHUB_OUTPUT" + echo "runner_vm_name=${{ env.RUNNER_VM_NAME }}-$HASH_VALUE" >> "$GITHUB_OUTPUT" - name: Provision VM if: env.LC_GITHUB_REPO_ADMIN_TOKEN run: | - echo "INFO: From ENVs: RUNNER_VM_NAME=${{ env.RUNNER_VM_NAME }}" - echo "INFO: From Step: RUNNER_VM_NAME=${{ steps.get-env.outputs.runner_vm_name }}" - - az login --service-principal --username "${{ secrets.AZURE_APP_ID }}" --password "${{ secrets.AZURE_APP_PASSWORD }}" --tenant "${{ secrets.AZURE_TENANT_ID }}" - az account set --subscription "Playground Subscription" - ## az account set -s "${{ secrets.AZURE_SUBSCRIPTION_ID }}" - - - # create resource group - echo "INFO: RG=${{ steps.get-env.outputs.resource_group }}" - az group create -n "${{ steps.get-env.outputs.resource_group }}" --location "${{ env.AZ_LOCATION }}" - - # RG Creditcoin-Test is in WestUS and the CPU quota is already full - # that's why specify a different region here - az deployment group create -g "${{ steps.get-env.outputs.resource_group }}" -f .github/runner.bicep \ - --parameters location="${{ env.AZ_LOCATION }}" \ - --parameters vmName="${{ steps.get-env.outputs.runner_vm_name }}" \ - --parameters adminPasswordOrKey="$(cat .github/authorized_keys)" > output.json - - # provision the GitHub Runner binary on the VM - # passing additional ENV values - SSH_USER_AT_HOSTNAME=$(jq -r '.properties.outputs.sshUserAtHostname.value' < output.json) - echo "INFO: $SSH_USER_AT_HOSTNAME" - - export LC_RUNNER_VM_NAME="${{ steps.get-env.outputs.runner_vm_name }}" - until ssh -i ~/.ssh/id_rsa \ - -o SendEnv=LC_GITHUB_REPO_ADMIN_TOKEN,LC_RUNNER_VM_NAME \ - -o StrictHostKeyChecking=no "$SSH_USER_AT_HOSTNAME" < .github/provision-github-runner.sh; do - echo "DEBUG: retrying ssh connection ..." - sleep 30 - done + .github/provision-linode-vm.sh env: LC_OWNER_REPO_SLUG: ${{ github.repository }} LC_GITHUB_REPO_ADMIN_TOKEN: ${{ secrets.GH_REPO_ADMIN_TOKEN }} LC_RUNNER_EPHEMERAL: false + LC_RUNNER_VM_NAME: ${{ steps.get-env.outputs.runner_vm_name }} + LC_PROXY_TYPE: ${{ matrix.proxy_type }} + LC_WORKFLOW_ID: ${{ github.run_id }} + LINODE_CLI_TOKEN: ${{ secrets.LINODE_CLI_TOKEN }} remove-github-runner: runs-on: ubuntu-24.04 @@ -653,37 +655,36 @@ jobs: - deploy-github-runner - test-against-fork - test-against-disconnected-live-node - if: ${{ always() && needs.deploy-github-runner.result != 'skipped' }} + if: ${{ always() }} + strategy: + fail-fast: false + matrix: + include: + - proxy_type: runtime-upgrade + + name: remove-github-runner / type=${{ matrix.proxy_type }} steps: - uses: actions/checkout@v4 with: lfs: true + # See https://github.com/actions/runner/issues/1879#issuecomment-1123196869 + - name: Create matrix.txt + run: | + echo "proxy=type=${{ matrix.proxy_type }}" > matrix.txt + - name: Evaluate env vars id: get-env run: | - # WARNING: using env.RUNNER_VM_NAME directly in job outputs above - # doesn't evaluate the $GITHUB_RUN_ID reference - echo "resource_group=${{ env.RESOURCE_GROUP }}" >> "$GITHUB_OUTPUT" + HASH_VALUE=$(echo "${{ hashFiles('matrix.txt') }}" | cut -c1-7) + rm matrix.txt - - name: Install azure-cli - run: | - sudo apt remove azure-cli -y && sudo apt autoremove -y - curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash - az version + echo "runner_vm_name=${{ env.RUNNER_VM_NAME }}-$HASH_VALUE" >> "$GITHUB_OUTPUT" - - name: Remove RG + - name: Remove VM run: | - echo "INFO: RUNNER_VM_NAME=${{ env.RUNNER_VM_NAME }}" - - az login --service-principal --username "${{ secrets.AZURE_APP_ID }}" --password "${{ secrets.AZURE_APP_PASSWORD }}" --tenant "${{ secrets.AZURE_TENANT_ID }}" - az account set --subscription "Playground Subscription" - az group delete --yes -n "${{ steps.get-env.outputs.resource_group }}" - - - name: Upload logs - uses: actions/upload-artifact@v4 - if: always() - with: - name: "Azure resources" - path: azure_resource_list.json + .github/remove-linode-vm.sh + env: + LINODE_CLI_TOKEN: ${{ secrets.LINODE_CLI_TOKEN }} + LC_RUNNER_VM_NAME: ${{ steps.get-env.outputs.runner_vm_name }} diff --git a/actionlint.yml b/actionlint.yml new file mode 100644 index 000000000..0fb55672c --- /dev/null +++ b/actionlint.yml @@ -0,0 +1,8 @@ +self-hosted-runner: + labels: + - type-runtime-upgrade +paths: + .github/workflows/runtime-upgrade.yml: + ignore: + # Ignore the specific error from shellcheck + - 'shellcheck reported issue in this script: SC2129:.+'