From 90e0057b612f1edbcf67b87bd3661fc1fca7363d Mon Sep 17 00:00:00 2001 From: mingshun Date: Thu, 27 Feb 2020 10:46:47 +0800 Subject: [PATCH 01/60] Add Tencent Cloud starter workflow --- ci/properties/tencent.properties.json | 6 +++ ci/tencent.yml | 76 +++++++++++++++++++++++++++ 2 files changed, 82 insertions(+) create mode 100644 ci/properties/tencent.properties.json create mode 100644 ci/tencent.yml diff --git a/ci/properties/tencent.properties.json b/ci/properties/tencent.properties.json new file mode 100644 index 0000000..d93a25e --- /dev/null +++ b/ci/properties/tencent.properties.json @@ -0,0 +1,6 @@ +{ + "name": "Build and Deploy to TKE", + "description": "Build a Docker container, publish it to TKE Registry, and deploy to TKE cluster.", + "iconName": "tencentcloud", + "categories": ["Dockerfile"] +} diff --git a/ci/tencent.yml b/ci/tencent.yml new file mode 100644 index 0000000..8b937bc --- /dev/null +++ b/ci/tencent.yml @@ -0,0 +1,76 @@ +# This workflow will build a docker container, publish it to TKE Registry, and deploy it to TKE. +# +# To configure this workflow: +# +# 1. Ensure that your repository contains the necessary configuration for your Tencent Kubernetes Engine cluster, +# including deployment.yml, kustomization.yml, service.yml, etc. +# +# 2. Set up secrets in your workspace: +# - TENCENT_CLOUD_SECRET_ID with Tencent Cloud secret id +# - TENCENT_CLOUD_SECRET_KEY with Tencent Cloud secret key +# - TENCENT_CLOUD_ACCOUNT_ID with Tencent Cloud account id +# - TKE_REGISTRY_PASSWORD with TKE registry password +# +# 3. Change the values for the TKE_IMAGE_URL, TKE_REGION, TKE_CLUSTER_ID and DEPLOYMENT_NAME environment variables (below). + +name: Build and Deploy to TKE + +on: + push: + branches: + - master + +# Environment variables available to all jobs and steps in this workflow +env: + TKE_IMAGE_URL: ccr.ccs.tencentyun.com/demo/mywebapp + TKE_REGION: ap-guangzhou + TKE_CLUSTER_ID: cls-mywebapp + DEPLOYMENT_NAME: tke-test + +jobs: + setup-build-publish-deploy: + name: Setup, Build, Publish, and Deploy + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + # Build + - name: Build Docker image + run: | + docker build -t ${TKE_IMAGE_URL}:${GITHUB_SHA} . + + - name: Login TKE Registry + run: | + docker login -u ${{ secrets.TENCENT_CLOUD_ACCOUNT_ID }} -p ${{ secrets.TKE_REGISTRY_PASSWORD }} ${TKE_IMAGE_URL} + + # Push the Docker image to TKE Registry + - name: Publish + run: | + docker push ${TKE_IMAGE_URL}:${GITHUB_SHA} + + - name: Set up Kustomize + run: | + curl -o kustomize --location https://github.com/kubernetes-sigs/kustomize/releases/download/v3.1.0/kustomize_3.1.0_linux_amd64 + chmod u+x ./kustomize + + - name: Set up ~/.kube/config for connecting TKE cluster + uses: TencentCloud/tke-cluster-credential-action@v1 + with: + secret_id: ${{ secrets.TENCENT_CLOUD_SECRET_ID }} + secret_key: ${{ secrets.TENCENT_CLOUD_SECRET_KEY }} + tke_region: ${{ env.TKE_REGION }} + cluster_id: ${{ env.TKE_CLUSTER_ID }} + + - name: Switch to TKE context + run: | + kubectl config use-context ${TKE_CLUSTER_ID}-context-default + + # Deploy the Docker image to the TKE cluster + - name: Deploy + run: | + ./kustomize edit set image ${TKE_IMAGE_URL}:${GITHUB_SHA} + ./kustomize build . | kubectl apply -f - + kubectl rollout status deployment/${DEPLOYMENT_NAME} + kubectl get services -o wide \ No newline at end of file From 1355c6f4395278d1c29cf00e49a4475328534ea0 Mon Sep 17 00:00:00 2001 From: Bernd Verst Date: Tue, 31 Mar 2020 11:26:59 -0700 Subject: [PATCH 02/60] Adds App Service documentation references This workflow assumes an App Service web app has already been created and that a user knows how to obtain the desired input values. This cannot be assumed. Therefore I have included references to the relevant documentation. --- ci/azure.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ci/azure.yml b/ci/azure.yml index dbb46b6..a638c4c 100644 --- a/ci/azure.yml +++ b/ci/azure.yml @@ -1,8 +1,12 @@ # This workflow will build and push a node.js application to an Azure Web App when a release is created. # +# This workflow assumes you have already created the target Azure App Service web app. +# For instructions see https://docs.microsoft.com/azure/app-service/app-service-plan-manage#create-an-app-service-plan +# # To configure this workflow: # # 1. Set up a secret in your repository named AZURE_WEBAPP_PUBLISH_PROFILE with the value of your Azure publish profile. +# For instructions on obtaining the publish profile see: https://docs.microsoft.com/azure/app-service/deploy-github-actions#configure-the-github-secret # # 2. Change the values for the AZURE_WEBAPP_NAME, AZURE_WEBAPP_PACKAGE_PATH and NODE_VERSION environment variables (below). # From 89a7d6d6fdf9d7efc48eef51de099dbc3f651328 Mon Sep 17 00:00:00 2001 From: Fumiaki Kinoshita Date: Thu, 13 Feb 2020 16:24:06 +0900 Subject: [PATCH 03/60] ci/haskell.yml: properly build dependencies, tests and benchmarks --- ci/haskell.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/ci/haskell.yml b/ci/haskell.yml index 3952e56..fc6d8b3 100644 --- a/ci/haskell.yml +++ b/ci/haskell.yml @@ -20,10 +20,8 @@ jobs: - name: Install dependencies run: | cabal update - cabal install --only-dependencies --enable-tests + cabal build --only-dependencies --enable-tests --enable-benchmarks - name: Build - run: | - cabal configure --enable-tests - cabal build + run: cabal build --enable-tests --enable-benchmarks all - name: Run tests - run: cabal test + run: cabal test all \ No newline at end of file From 8635fcacca0bc15706d4bf992b30b95fb8aa0062 Mon Sep 17 00:00:00 2001 From: Fumiaki Kinoshita Date: Wed, 26 Feb 2020 20:23:25 +0900 Subject: [PATCH 04/60] ci/haskell.yml: cache dependencies --- ci/haskell.yml | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/ci/haskell.yml b/ci/haskell.yml index fc6d8b3..4bc2d16 100644 --- a/ci/haskell.yml +++ b/ci/haskell.yml @@ -17,6 +17,19 @@ jobs: with: ghc-version: '8.8.2' cabal-version: '3.0' + + - name: Cache + uses: actions/cache@v1 + env: + cache-name: cache-cabal + with: + path: ~/.cabal + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/*.cabal') }}-${{ hashFiles('**/cabal.project') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install dependencies run: | cabal update @@ -24,4 +37,4 @@ jobs: - name: Build run: cabal build --enable-tests --enable-benchmarks all - name: Run tests - run: cabal test all \ No newline at end of file + run: cabal test all From 20088f94566da626b035b3c3008f0d7abb60e29c Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Fri, 3 Apr 2020 15:14:18 +0100 Subject: [PATCH 05/60] Update pull_request_template.md --- .github/pull_request_template.md | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 51f963e..3d6833a 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,15 +5,23 @@ Thank you for sending in this pull request. Please make sure you take a look at In the workflow and properties files: +- [ ] The workflow filename of CI workflows should be the name of the language or platform, in lower case. Special characters should be removed or replaced with words as appropriate (for example, "dotnet" instead of ".NET"). The workflow filename of publishing workflows should be the name of the language or platform, in lower case, followed by "-publish". - [ ] Includes a matching `ci/properties/*.properties.json` file. -- [ ] Use title case for the names of workflows and steps, for example "Run tests". +- [ ] Use sentence case for the names of workflows and steps, for example "Run tests". - [ ] The name of CI workflows should only be the name of the language or platform: for example "Go" (not "Go CI" or "Go Build") - [ ] Include comments in the workflow for any parts that are not obvious or could use clarification. -- [ ] CI workflows should run `push`. -- [ ] Packaging workflows should run on `release` with `types: [created]`. +- [ ] CI workflows should run on `push` to `branches: [ master ]` and `pull_request` to `branches: [ master ]`. Packaging workflows should run on `release` with `types: [ created ]`. Some general notes: -- [ ] Does not use an Action that isn't in the `actions` organization. -- [ ] Does not send data to any 3rd party service except for the purposes of installing dependencies. -- [ ] Does not use a paid service or product. +- [ ] This workflow must use only actions produced by GitHub or the langauge or ecosystem that the workflow supports. + * [ ] This workflow must only use actions that are produced by GitHub, [in the `actions` organization](https://github.com/actions), or + * [ ] This workflow must only use actions that are produced by the language or ecosystem that the workflow supports. These actions must be [published to the GitHub Marketplace](https://github.com/marketplace?type=actions). Workflows using these actions must include the following comment at the top of the workflow file: + ``` + # This workflow uses actions that are not certified by GitHub. + # They are provided by a third-party and are governed by + # separate terms of service, privacy policy, and support + # documentation. + ``` +- [ ] This workflow must not send data to any 3rd party service except for the purposes of installing dependencies. +- [ ] This workflow must not use a paid service or product. From ccaa3fe1686e3743d7923f98dde3dcd63ca8c474 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Fri, 3 Apr 2020 15:20:55 +0100 Subject: [PATCH 06/60] Update pull_request_template.md Formatting updates. --- .github/pull_request_template.md | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 3d6833a..2e390ab 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -5,18 +5,22 @@ Thank you for sending in this pull request. Please make sure you take a look at In the workflow and properties files: -- [ ] The workflow filename of CI workflows should be the name of the language or platform, in lower case. Special characters should be removed or replaced with words as appropriate (for example, "dotnet" instead of ".NET"). The workflow filename of publishing workflows should be the name of the language or platform, in lower case, followed by "-publish". +- [ ] The workflow filename of CI workflows should be the name of the language or platform, in lower case. Special characters should be removed or replaced with words as appropriate (for example, "dotnet" instead of ".NET"). + + The workflow filename of publishing workflows should be the name of the language or platform, in lower case, followed by "-publish". - [ ] Includes a matching `ci/properties/*.properties.json` file. - [ ] Use sentence case for the names of workflows and steps, for example "Run tests". - [ ] The name of CI workflows should only be the name of the language or platform: for example "Go" (not "Go CI" or "Go Build") - [ ] Include comments in the workflow for any parts that are not obvious or could use clarification. -- [ ] CI workflows should run on `push` to `branches: [ master ]` and `pull_request` to `branches: [ master ]`. Packaging workflows should run on `release` with `types: [ created ]`. +- [ ] CI workflows should run on `push` to `branches: [ master ]` and `pull_request` to `branches: [ master ]`. + + Packaging workflows should run on `release` with `types: [ created ]`. Some general notes: -- [ ] This workflow must use only actions produced by GitHub or the langauge or ecosystem that the workflow supports. - * [ ] This workflow must only use actions that are produced by GitHub, [in the `actions` organization](https://github.com/actions), or - * [ ] This workflow must only use actions that are produced by the language or ecosystem that the workflow supports. These actions must be [published to the GitHub Marketplace](https://github.com/marketplace?type=actions). Workflows using these actions must include the following comment at the top of the workflow file: +- [ ] This workflow must only use actions that are produced by GitHub, [in the `actions` organization](https://github.com/actions), **or** + + This workflow must only use actions that are produced by the language or ecosystem that the workflow supports. These actions must be [published to the GitHub Marketplace](https://github.com/marketplace?type=actions). Workflows using these actions must include the following comment at the top of the workflow file: ``` # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by From 51163e48538145b208c4c68d53c3af0d1ac61151 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Mon, 6 Apr 2020 13:02:13 +0100 Subject: [PATCH 07/60] Update pull_request_template.md --- .github/pull_request_template.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 2e390ab..35bfb44 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -20,7 +20,7 @@ Some general notes: - [ ] This workflow must only use actions that are produced by GitHub, [in the `actions` organization](https://github.com/actions), **or** - This workflow must only use actions that are produced by the language or ecosystem that the workflow supports. These actions must be [published to the GitHub Marketplace](https://github.com/marketplace?type=actions). Workflows using these actions must include the following comment at the top of the workflow file: + This workflow must only use actions that are produced by the language or ecosystem that the workflow supports. These actions must be [published to the GitHub Marketplace](https://github.com/marketplace?type=actions). Workflows using these actions must reference the action using the full 40 character hash of the action's commit instead of a tag. Additionally, workflows must include the following comment at the top of the workflow file: ``` # This workflow uses actions that are not certified by GitHub. # They are provided by a third-party and are governed by From 2ac9c51b545f361a3976809ec127c67f145cfb15 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Mon, 6 Apr 2020 10:12:17 -0400 Subject: [PATCH 08/60] Added starter workflow for desktop apps. --- ci/desktop.yml | 109 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 ci/desktop.yml diff --git a/ci/desktop.yml b/ci/desktop.yml new file mode 100644 index 0000000..83ff99a --- /dev/null +++ b/ci/desktop.yml @@ -0,0 +1,109 @@ +# This workflow will build, test and create app packages for a Wpf project built on Net Core. +# +# To configure this workflow: +# +# 1. Configure environment variables +# GitHub sets default environment variables for every workflow run. Replace the variables relative to your +# project in the "env" section below. +# +# 2. Signing +# Generate a signing certificate in the Windows Application Packaging Project or add an existing signing certificate +# to the project. Next, use PowerShell to encode the .pfx file using Base64 encoding by running the following Powershell +# script to generate the output file. +# +# $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte +# [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt' +# +# Open the output file, SigningCertificate_Encoded.txt, and copy the string inside. Then, add the string to the repo +# as a GitHub secret and name it "Base64_Encoded_Pfx." +# For more information on how to configure your signing certificate for this workflow, refer +# to https://github.com/microsoft/github-actions-for-desktop-apps#signing +# +# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key." +# See "Build the Windows Application Packaging project" below to see how the secret is used. +# +# For more information on GitHub Actions, refer to https://github.com/features/actions +# For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications, +# refer to https://github.com/microsoft/github-actions-for-desktop-apps + +name: Build and publish a desktop application + +# Trigger on every master branch push and pull request +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + + build: + + strategy: + matrix: + configuration: [Debug, Release] + + runs-on: windows-latest + + env: + Appx_Bundle: Always # Creates an .msixbundle/.appxbundle with the .msix/.appx files for the platform specified. + App_Packages_Directory: AppPackages # The name of the directory that will contain the application packages. The default is "AppPackages." + Appx_Bundle_Platforms: x86|x64 # Include x86 and x64 platforms in the bundle. Possible values: x86|x64|ARM + Appx_Package_Build_Mode: StoreUpload # Generates the .msixupload/.appxupload file and the _Test folder for sideloading. + Signing_Certificate: GitHubActionsDemo.pfx # The name of the .pfx that will be created by decoding the Base 64 secret and consumed during the packaging step. + Solution_Name: your-solution-name # Replace with your solution name, i.e. MyWpfApp.sln. + Test_Project_Path: your-test-project-path # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj. + Wap_Project_Directory: your-wap-project-directory-name # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package. + Wap_Project_Path: your-wap-project-path # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj. + + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + # Install the .NET Core workload + - name: Install .NET Core + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 3.1.100 + + # Add MsBuild to the PATH: https://github.com/microsoft/setup-msbuild + - name: Setup MSBuild.exe + uses: microsoft/setup-msbuild@v1.0.0 + + # Test + - name: Execute Unit Tests + run: dotnet test $env:Test_Project_Path + + # Restore the Wpf application to populate the obj folder with RuntimeIdentifiers + - name: Restore the Wpf application + run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration + env: + Configuration: ${{ matrix.configuration }} + + # Decode the Base64 encoded Pfx + - name: Decode the Pfx + run: | + $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}") + $certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath $env:Signing_Certificate + [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte) + + # Create the app package by building and packaging the Windows Application Packaging project + - name: Create the App Package + run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=$env:Signing_Certificate /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} + env: + Configuration: ${{ matrix.configuration }} + + # Remove the .pfx + - name: Remove the .pfx + run: Remove-Item -path $env:Wap_Project_Directory\$env:Signing_Certificate + + # Upload the MSIX package: https://github.com/marketplace/actions/upload-artifact + - name: Upload build artifacts + uses: actions/upload-artifact@v1 + with: + name: MSIX Package + path: ${{ env.Wap_Project_Directory }}\${{ env.App_Packages_Directory }} From 0c7710ef26500dbfaa7a5bd2e8028b765130b2b6 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Mon, 6 Apr 2020 10:29:23 -0400 Subject: [PATCH 09/60] Added the properties file and updated the workflow file to conform to PR specifications. --- ci/desktop.yml | 27 +++++++++++++-------------- ci/properties/desktop.properties.json | 6 ++++++ 2 files changed, 19 insertions(+), 14 deletions(-) create mode 100644 ci/properties/desktop.properties.json diff --git a/ci/desktop.yml b/ci/desktop.yml index 83ff99a..4a2b0a5 100644 --- a/ci/desktop.yml +++ b/ci/desktop.yml @@ -1,4 +1,6 @@ -# This workflow will build, test and create app packages for a Wpf project built on Net Core. +# This workflow will build, test and package a Wpf desktop application built on .NET Core. +# To learn how to migrate your existing WPF application to .NET Core, +# refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework # # To configure this workflow: # @@ -26,16 +28,13 @@ # For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications, # refer to https://github.com/microsoft/github-actions-for-desktop-apps -name: Build and publish a desktop application +name: Build, deploy and publish a Wpf desktop application -# Trigger on every master branch push and pull request on: push: - branches: - - master + branches: [ master ] pull_request: - branches: - - master + branches: [ master ] jobs: @@ -68,14 +67,14 @@ jobs: - name: Install .NET Core uses: actions/setup-dotnet@v1 with: - dotnet-version: 3.1.100 + dotnet-version: 3.1.101 # Add MsBuild to the PATH: https://github.com/microsoft/setup-msbuild - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v1.0.0 # Test - - name: Execute Unit Tests + - name: Execute unit tests run: dotnet test $env:Test_Project_Path # Restore the Wpf application to populate the obj folder with RuntimeIdentifiers @@ -84,21 +83,21 @@ jobs: env: Configuration: ${{ matrix.configuration }} - # Decode the Base64 encoded Pfx - - name: Decode the Pfx + # Decode the base 64 encoded pfx and save the Signing_Certificate + - name: Decode the pfx run: | $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}") $certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath $env:Signing_Certificate [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte) # Create the app package by building and packaging the Windows Application Packaging project - - name: Create the App Package + - name: Create the app package run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=$env:Signing_Certificate /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} env: Configuration: ${{ matrix.configuration }} - # Remove the .pfx - - name: Remove the .pfx + # Remove the pfx + - name: Remove the pfx run: Remove-Item -path $env:Wap_Project_Directory\$env:Signing_Certificate # Upload the MSIX package: https://github.com/marketplace/actions/upload-artifact diff --git a/ci/properties/desktop.properties.json b/ci/properties/desktop.properties.json new file mode 100644 index 0000000..e04727e --- /dev/null +++ b/ci/properties/desktop.properties.json @@ -0,0 +1,6 @@ +{ + "name": "Test and publish a Wpf application", + "description": "Build, test and publish a Wpf application built on .NET Core.", + "iconName": "Wpf", + "categories": ["C#", "Visual Basic", "WPF", ".NET"] +} \ No newline at end of file From a2adc6fc7388fe22ccc1b2a05896585ecab5fbf1 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Mon, 6 Apr 2020 10:32:56 -0400 Subject: [PATCH 10/60] Updated files with name that conforms to PR recommendations. --- ci/desktop.yml | 2 +- ci/properties/desktop.properties.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/desktop.yml b/ci/desktop.yml index 4a2b0a5..4a06abf 100644 --- a/ci/desktop.yml +++ b/ci/desktop.yml @@ -28,7 +28,7 @@ # For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications, # refer to https://github.com/microsoft/github-actions-for-desktop-apps -name: Build, deploy and publish a Wpf desktop application +name: Wpf .NET Core on: push: diff --git a/ci/properties/desktop.properties.json b/ci/properties/desktop.properties.json index e04727e..4a382a2 100644 --- a/ci/properties/desktop.properties.json +++ b/ci/properties/desktop.properties.json @@ -1,5 +1,5 @@ { - "name": "Test and publish a Wpf application", + "name": "Wpf .NET Core", "description": "Build, test and publish a Wpf application built on .NET Core.", "iconName": "Wpf", "categories": ["C#", "Visual Basic", "WPF", ".NET"] From 67ffe1ea7ac8dc746ead8838b1a233a36d586bb3 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Fri, 3 Apr 2020 20:24:59 +0200 Subject: [PATCH 11/60] Use ruby/setup-ruby for the Ruby starter workflow --- ci/ruby.yml | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/ci/ruby.yml b/ci/ruby.yml index 6415d43..7a78b45 100644 --- a/ci/ruby.yml +++ b/ci/ruby.yml @@ -1,3 +1,10 @@ +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. +# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake +# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby + name: Ruby on: @@ -7,18 +14,17 @@ on: branches: [ master ] jobs: - build: + test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Set up Ruby 2.6 - uses: actions/setup-ruby@v1 + - name: Set up Ruby + uses: ruby/setup-ruby@v1 with: - ruby-version: 2.6.x - - name: Build and test with Rake - run: | - gem install bundler - bundle install --jobs 4 --retry 3 - bundle exec rake + ruby-version: 2.6 + - name: Install dependencies + run: bundle install + - name: Run tests + run: bundle exec rake From 703084fb8c1a13fb8933c95a9ef500e12da4d2bf Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Tue, 7 Apr 2020 12:24:02 -0400 Subject: [PATCH 12/60] Renamed files and addressed PR feedback. --- ...s.json => wpf-dotnet-core.properties.json} | 0 ci/{desktop.yml => wpf-dotnet-core.yml} | 31 +++++++++---------- 2 files changed, 15 insertions(+), 16 deletions(-) rename ci/properties/{desktop.properties.json => wpf-dotnet-core.properties.json} (100%) rename ci/{desktop.yml => wpf-dotnet-core.yml} (75%) diff --git a/ci/properties/desktop.properties.json b/ci/properties/wpf-dotnet-core.properties.json similarity index 100% rename from ci/properties/desktop.properties.json rename to ci/properties/wpf-dotnet-core.properties.json diff --git a/ci/desktop.yml b/ci/wpf-dotnet-core.yml similarity index 75% rename from ci/desktop.yml rename to ci/wpf-dotnet-core.yml index 4a06abf..a8241ab 100644 --- a/ci/desktop.yml +++ b/ci/wpf-dotnet-core.yml @@ -1,4 +1,4 @@ -# This workflow will build, test and package a Wpf desktop application built on .NET Core. +# This workflow will build, test and package a WPF desktop application built on .NET Core. # To learn how to migrate your existing WPF application to .NET Core, # refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework # @@ -11,7 +11,7 @@ # 2. Signing # Generate a signing certificate in the Windows Application Packaging Project or add an existing signing certificate # to the project. Next, use PowerShell to encode the .pfx file using Base64 encoding by running the following Powershell -# script to generate the output file. +# script to generate the output string. # # $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte # [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt' @@ -28,7 +28,7 @@ # For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications, # refer to https://github.com/microsoft/github-actions-for-desktop-apps -name: Wpf .NET Core +name: WPF .NET Core on: push: @@ -44,14 +44,10 @@ jobs: matrix: configuration: [Debug, Release] - runs-on: windows-latest + runs-on: windows-latest # For a list of available runner types, refer to + # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on env: - Appx_Bundle: Always # Creates an .msixbundle/.appxbundle with the .msix/.appx files for the platform specified. - App_Packages_Directory: AppPackages # The name of the directory that will contain the application packages. The default is "AppPackages." - Appx_Bundle_Platforms: x86|x64 # Include x86 and x64 platforms in the bundle. Possible values: x86|x64|ARM - Appx_Package_Build_Mode: StoreUpload # Generates the .msixupload/.appxupload file and the _Test folder for sideloading. - Signing_Certificate: GitHubActionsDemo.pfx # The name of the .pfx that will be created by decoding the Base 64 secret and consumed during the packaging step. Solution_Name: your-solution-name # Replace with your solution name, i.e. MyWpfApp.sln. Test_Project_Path: your-test-project-path # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj. Wap_Project_Directory: your-wap-project-directory-name # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package. @@ -73,12 +69,12 @@ jobs: - name: Setup MSBuild.exe uses: microsoft/setup-msbuild@v1.0.0 - # Test + # Execute all unit tests in the solution - name: Execute unit tests - run: dotnet test $env:Test_Project_Path + run: dotnet test - # Restore the Wpf application to populate the obj folder with RuntimeIdentifiers - - name: Restore the Wpf application + # Restore the WPF application to populate the obj folder with RuntimeIdentifiers + - name: Restore the WPF application run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration env: Configuration: ${{ matrix.configuration }} @@ -87,13 +83,16 @@ jobs: - name: Decode the pfx run: | $pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}") - $certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath $env:Signing_Certificate + $certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath GitHubActionsWorkflow.pfx [IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte) # Create the app package by building and packaging the Windows Application Packaging project - name: Create the app package - run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=$env:Signing_Certificate /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} + run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:PackageCertificatePassword=${{ secrets.Pfx_Key }} env: + Appx_Bundle: Always + Appx_Bundle_Platforms: x86|x64 + Appx_Package_Build_Mode: StoreUpload Configuration: ${{ matrix.configuration }} # Remove the pfx @@ -105,4 +104,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: MSIX Package - path: ${{ env.Wap_Project_Directory }}\${{ env.App_Packages_Directory }} + path: ${{ env.Wap_Project_Directory }}\AppPackages From a3f957729c2f2ab206a0c109318258edb4f6bf32 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Wed, 8 Apr 2020 10:17:52 -0400 Subject: [PATCH 13/60] Responded to PR feedback. Added commit hash to microsoft setup action. --- ci/wpf-dotnet-core.yml | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/ci/wpf-dotnet-core.yml b/ci/wpf-dotnet-core.yml index a8241ab..80ec3e5 100644 --- a/ci/wpf-dotnet-core.yml +++ b/ci/wpf-dotnet-core.yml @@ -1,27 +1,35 @@ -# This workflow will build, test and package a WPF desktop application built on .NET Core. +# This workflow uses actions that are not certified by GitHub. +# They are provided by a third-party and are governed by +# separate terms of service, privacy policy, and support +# documentation. + +# This workflow will build, test and package a WPF desktop application +# built on .NET Core. # To learn how to migrate your existing WPF application to .NET Core, # refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework # # To configure this workflow: # # 1. Configure environment variables -# GitHub sets default environment variables for every workflow run. Replace the variables relative to your -# project in the "env" section below. +# GitHub sets default environment variables for every workflow run. +# Replace the variables relative to your project in the "env" section below. # # 2. Signing -# Generate a signing certificate in the Windows Application Packaging Project or add an existing signing certificate -# to the project. Next, use PowerShell to encode the .pfx file using Base64 encoding by running the following Powershell -# script to generate the output string. +# Generate a signing certificate in the Windows Application +# Packaging Project or add an existing signing certificate to the project. +# Next, use PowerShell to encode the .pfx file using Base64 encoding +# by running the following Powershell script to generate the output string: # # $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte # [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt' # -# Open the output file, SigningCertificate_Encoded.txt, and copy the string inside. Then, add the string to the repo -# as a GitHub secret and name it "Base64_Encoded_Pfx." -# For more information on how to configure your signing certificate for this workflow, refer -# to https://github.com/microsoft/github-actions-for-desktop-apps#signing +# Open the output file, SigningCertificate_Encoded.txt, and copy the +# string inside. Then, add the string to the repo as a GitHub secret +# and name it "Base64_Encoded_Pfx." +# For more information on how to configure your signing certificate for +# this workflow, refer to https://github.com/microsoft/github-actions-for-desktop-apps#signing # -# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key." +# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key". # See "Build the Windows Application Packaging project" below to see how the secret is used. # # For more information on GitHub Actions, refer to https://github.com/features/actions @@ -65,9 +73,9 @@ jobs: with: dotnet-version: 3.1.101 - # Add MsBuild to the PATH: https://github.com/microsoft/setup-msbuild + # Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild - name: Setup MSBuild.exe - uses: microsoft/setup-msbuild@v1.0.0 + uses: microsoft/setup-msbuild@2008f912f56e61277eefaac6d1888b750582aa16 # Execute all unit tests in the solution - name: Execute unit tests From 29e8a67beb08258b8b7f2baa5778c2386169d1e9 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Wed, 8 Apr 2020 14:50:15 -0400 Subject: [PATCH 14/60] Fixed case of wpf --- ci/properties/wpf-dotnet-core.properties.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/properties/wpf-dotnet-core.properties.json b/ci/properties/wpf-dotnet-core.properties.json index 4a382a2..56eea90 100644 --- a/ci/properties/wpf-dotnet-core.properties.json +++ b/ci/properties/wpf-dotnet-core.properties.json @@ -1,6 +1,6 @@ { - "name": "Wpf .NET Core", + "name": "WPF .NET Core", "description": "Build, test and publish a Wpf application built on .NET Core.", - "iconName": "Wpf", + "iconName": "WPF", "categories": ["C#", "Visual Basic", "WPF", ".NET"] } \ No newline at end of file From 06b21b84fd80dbe7d29a1ae3656aaf5a9f662efc Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Thu, 9 Apr 2020 08:41:42 +0100 Subject: [PATCH 15/60] python: gracefully handle no requirements.txt If there's no requirements.txt then there's no need to `pip install` them. --- ci/python-app.yml | 5 ++--- ci/python-package.yml | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/ci/python-app.yml b/ci/python-app.yml index 25a32ef..900e442 100644 --- a/ci/python-app.yml +++ b/ci/python-app.yml @@ -23,15 +23,14 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt + pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | - pip install flake8 # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | - pip install pytest pytest diff --git a/ci/python-package.yml b/ci/python-package.yml index 0d78aa5..b425371 100644 --- a/ci/python-package.yml +++ b/ci/python-package.yml @@ -26,15 +26,14 @@ jobs: - name: Install dependencies run: | python -m pip install --upgrade pip - pip install -r requirements.txt + pip install flake8 pytest + if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Lint with flake8 run: | - pip install flake8 # stop the build if there are Python syntax errors or undefined names flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - name: Test with pytest run: | - pip install pytest pytest From 9dd8f4e44a04e7ff304cf172242a85e4246de947 Mon Sep 17 00:00:00 2001 From: Benoit Daloze Date: Thu, 9 Apr 2020 19:59:10 +0200 Subject: [PATCH 16/60] Use a full commit sha as required by GitHub for 3rd-party actions --- ci/ruby.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ci/ruby.yml b/ci/ruby.yml index 7a78b45..76c166e 100644 --- a/ci/ruby.yml +++ b/ci/ruby.yml @@ -21,7 +21,10 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Ruby - uses: ruby/setup-ruby@v1 + # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby, + # change this to (see https://github.com/ruby/setup-ruby#versioning): + # uses: ruby/setup-ruby@v1 + uses: ruby/setup-ruby@ec106b438a1ff6ff109590de34ddc62c540232e0 with: ruby-version: 2.6 - name: Install dependencies From acc6dd8232724fd642db26d1acf95e75cefcdcbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastian=20Le=20Merdy?= <567637+seblm@users.noreply.github.com> Date: Mon, 13 Apr 2020 22:00:37 +0200 Subject: [PATCH 17/60] Add Scala icon --- ci/properties/scala.properties.json | 2 +- icons/scala.svg | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 icons/scala.svg diff --git a/ci/properties/scala.properties.json b/ci/properties/scala.properties.json index d44e867..a92fc73 100644 --- a/ci/properties/scala.properties.json +++ b/ci/properties/scala.properties.json @@ -1,6 +1,6 @@ { "name": "Scala", "description": "Build and test a Scala project with SBT.", - "iconName": "blank", + "iconName": "scala", "categories": ["Scala", "Java"] } diff --git a/icons/scala.svg b/icons/scala.svg new file mode 100644 index 0000000..80c5b99 --- /dev/null +++ b/icons/scala.svg @@ -0,0 +1 @@ + From 6c7202a657202b964444706f1f50fa283650f8cf Mon Sep 17 00:00:00 2001 From: Jai Govindani Date: Tue, 14 Apr 2020 18:10:05 +0700 Subject: [PATCH 18/60] Add `Test` step Testing in Go is a first-class citizen, any starter workflow should also have a Test step. --- ci/go.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/go.yml b/ci/go.yml index b66c0d7..0a49300 100644 --- a/ci/go.yml +++ b/ci/go.yml @@ -32,3 +32,6 @@ jobs: - name: Build run: go build -v . + + - name: Test + run: go test -v . From 2720260ff74063245fdad673b3424e0146100997 Mon Sep 17 00:00:00 2001 From: Bryan MacFarlane Date: Thu, 16 Apr 2020 19:01:39 -0400 Subject: [PATCH 19/60] update setup-go to v2 --- ci/go.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/go.yml b/ci/go.yml index 0a49300..d31e87f 100644 --- a/ci/go.yml +++ b/ci/go.yml @@ -13,10 +13,10 @@ jobs: runs-on: ubuntu-latest steps: - - name: Set up Go 1.13 - uses: actions/setup-go@v1 + - name: Set up Go 1.x + uses: actions/setup-go@v2 with: - go-version: 1.13 + go-version: ^1.13 id: go - name: Check out code into the Go module directory From 8dc9fb3b3a090b51a20fde54733ead3cbf728e40 Mon Sep 17 00:00:00 2001 From: sineverba Date: Mon, 20 Apr 2020 08:54:47 +0200 Subject: [PATCH 20/60] Fix image name as env var --- ci/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker-publish.yml b/ci/docker-publish.yml index 21f5bd1..1a1805f 100644 --- a/ci/docker-publish.yml +++ b/ci/docker-publish.yml @@ -48,7 +48,7 @@ jobs: - uses: actions/checkout@v2 - name: Build image - run: docker build . --file Dockerfile --tag image + run: docker build . --file Dockerfile --tag $IMAGE_NAME - name: Log into registry run: echo "${{ secrets.GITHUB_TOKEN }}" | docker login docker.pkg.github.com -u ${{ github.actor }} --password-stdin From 9bc2c5c75e29554d9c5486c15d1cb8db5e478088 Mon Sep 17 00:00:00 2001 From: Edward Thomson Date: Sun, 26 Apr 2020 19:01:56 +0100 Subject: [PATCH 21/60] node: remove CI=true environment variable The CI environment variable is now set by GitHub Actions directly. No need to set it in the workflow. --- ci/node.js.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/ci/node.js.yml b/ci/node.js.yml index 4390e93..e772a1c 100644 --- a/ci/node.js.yml +++ b/ci/node.js.yml @@ -27,5 +27,3 @@ jobs: - run: npm ci - run: npm run build --if-present - run: npm test - env: - CI: true From 0254a244d2bb8562c48a66a9aed2d9b1667c38dc Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Fri, 24 Apr 2020 23:48:32 -0400 Subject: [PATCH 22/60] Add support for IBM Kuberenetes Service (IKS) This patch adds support for deploying an application to IKS by performing the following steps: 1. Downloading and installing the IBM Cloud CLI, 2. Building locally with Docker, 3. Pushing to ICR (IBM Container Registry), and 4. Deploying with kubectl to IKS Co-authored-by: JJ Asghar Signed-off-by: Steve Martinelli --- ci/ibm.yml | 74 +++++++++++++++++++++++++++++++ ci/properties/ibm.properties.json | 6 +++ icons/ibm.svg | 61 +++++++++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 ci/ibm.yml create mode 100644 ci/properties/ibm.properties.json create mode 100644 icons/ibm.svg diff --git a/ci/ibm.yml b/ci/ibm.yml new file mode 100644 index 0000000..8af050f --- /dev/null +++ b/ci/ibm.yml @@ -0,0 +1,74 @@ +# This workflow will build a docker container, publish it to IBM Container Registry, and deploy it to IKS when a release is created +# +# To configure this workflow: +# +# 1. Ensure that your repository contains a Dockerfile +# 2. Setup secrets in your repository by going to settings: Create ICR_NAMESPACE and IBM_CLOUD_API_KEY +# 3. Change the values for the IBM_CLOUD_REGION, REGISTRY_HOSTNAME, IMAGE_NAME, IKS_CLUSTER, DEPLOYMENT_NAME, and PORT + +name: Build and Deploy to IKS + +on: + release: + types: [created] + +# Environment variables available to all jobs and steps in this workflow +env: + GITHUB_SHA: ${{ github.sha }} + IBM_CLOUD_API_KEY: ${{ secrets.IBM_CLOUD_API_KEY }} + IBM_CLOUD_REGION: us-south + ICR_NAMESPACE: ${{ secrets.ICR_NAMESPACE }} + REGISTRY_HOSTNAME: us.icr.io + IMAGE_NAME: iks-test + IKS_CLUSTER: example-iks-cluster-name-or-id + DEPLOYMENT_NAME: iks-test + PORT: 5001 + +jobs: + setup-build-publish-deploy: + name: Setup, Build, Publish, and Deploy + runs-on: ubuntu-latest + steps: + + - name: Checkout + uses: actions/checkout@v2 + + # Download and Install IBM Cloud CLI + - name: Install IBM Cloud CLI + run: | + curl -fsSL https://clis.cloud.ibm.com/install/linux | sh + ibmcloud --version + ibmcloud config --check-version=false + ibmcloud plugin install -f kubernetes-service + ibmcloud plugin install -f container-registry + + # Authenticate with IBM Cloud CLI + - name: Authenticate with IBM Cloud CLI + run: | + ibmcloud login --apikey "${IBM_CLOUD_API_KEY}" -r "${IBM_CLOUD_REGION}" -g default + ibmcloud cr region-set "${IBM_CLOUD_REGION}" + ibmcloud cr login + + # Build the Docker image + - name: Build with Docker + run: | + docker build -t "$REGISTRY_HOSTNAME"/"$ICR_NAMESPACE"/"$IMAGE_NAME":"$GITHUB_SHA" \ + --build-arg GITHUB_SHA="$GITHUB_SHA" \ + --build-arg GITHUB_REF="$GITHUB_REF" . + + # Push the image to IBM Container Registry + - name: Push the image to ICR + run: | + docker push $REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA + + # Deploy the Docker image to the IKS cluster + - name: Deploy to IKS + run: | + ibmcloud ks cluster config --cluster $IKS_CLUSTER + kubectl config current-context + kubectl create deployment $DEPLOYMENT_NAME --image=$REGISTRY_HOSTNAME/$ICR_NAMESPACE/$IMAGE_NAME:$GITHUB_SHA --dry-run -o yaml > deployment.yaml + kubectl apply -f deployment.yaml + kubectl rollout status deployment/$DEPLOYMENT_NAME + kubectl create service loadbalancer $DEPLOYMENT_NAME --tcp=80:$PORT --dry-run -o yaml > service.yaml + kubectl apply -f service.yaml + kubectl get services -o wide diff --git a/ci/properties/ibm.properties.json b/ci/properties/ibm.properties.json new file mode 100644 index 0000000..44d8996 --- /dev/null +++ b/ci/properties/ibm.properties.json @@ -0,0 +1,6 @@ +{ + "name": "Build and Deploy to IKS", + "description": "Build a docker container, publish it to IBM Container Registry, and deploy to IKS.", + "iconName": "ibm", + "categories": null +} \ No newline at end of file diff --git a/icons/ibm.svg b/icons/ibm.svg new file mode 100644 index 0000000..3732033 --- /dev/null +++ b/icons/ibm.svg @@ -0,0 +1,61 @@ + + + + +Created by potrace 1.16, written by Peter Selinger 2001-2019 + + + + + + + + + + + + From 3c5440479dcff08bd195911245b9b8454417c9f6 Mon Sep 17 00:00:00 2001 From: John Bohannon Date: Tue, 28 Apr 2020 14:11:34 -0400 Subject: [PATCH 23/60] Create terraform.yml --- ci/terraform.yml | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 90 insertions(+) create mode 100644 ci/terraform.yml diff --git a/ci/terraform.yml b/ci/terraform.yml new file mode 100644 index 0000000..148f2e2 --- /dev/null +++ b/ci/terraform.yml @@ -0,0 +1,90 @@ +# This workflow installs the latest version of Terraform CLI and configures the Terraform CLI configuration file +# with an API token for Terraform Cloud (app.terraform.io). On pull request events, this workflow will run +# `terraform init`, `terraform fmt`, and `terraform plan` (speculative plan via Terraform Cloud). On push events +# to the master branch, `terraform apply` will be executed. +# +# Documentation for `hashicorp/setup-terraform` is located here: https://github.com/hashicorp/setup-terraform +# +# To use this workflow, you will need to complete the following setup steps. +# +# 1. Create a `main.tf` file in the root of this repository with the `remote` backend and one or more resources defined. +# Example `main.tf`: +# # The configuration for the `remote` backend. +# terraform { +# backend "remote" { +# # The name of your Terraform Cloud organization. +# organization = "example-organization" +# +# # The name of the Terraform Cloud workspace to store Terraform state files in. +# workspaces { +# name = "example-workspace" +# } +# } +# } +# +# # An example resource that does nothing. +# resource "null_resource" "example" { +# triggers = { +# value = "A example resource that does nothing!" +# } +# } +# +# +# 2. Generate a Terraform Cloud user API token and store it as a GitHub secret (e.g. TF_API_TOKEN) on this repository. +# Documentation: +# - https://www.terraform.io/docs/cloud/users-teams-organizations/api-tokens.html +# - https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets +# +# 3. Reference the GitHub secret in step using the `hashicorp/setup-terraform` GitHub Action. +# Example: +# - name: Setup Terraform +# uses: hashicorp/setup-terraform@v1 +# with: +# cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} + +name: 'Terraform' + +on: + push: + branches: + - master + pull_request: + +jobs: + terraform: + name: 'Terraform' + runs-on: ubuntu-latest + + # Use the Bash shell regardless whether the GitHub Actions runner is ubuntu-latest, macos-latest, or windows-latest + defaults: + run: + shell: bash + + # Checkout the repository to the GitHub Actions runner + steps: + - name: Checkout + uses: actions/checkout@v2 + + # Install the latest version of Terraform CLI and configure the Terraform CLI configuration file with a Terraform Cloud user API token + - name: Setup Terraform + uses: hashicorp/setup-terraform@v1 + with: + cli_config_credentials_token: ${{ secrets.TF_API_TOKEN }} + + # Initialize a new or existing Terraform working directory by creating initial files, loading any remote state, downloading modules, etc. + - name: Terraform Init + run: terraform init + + # Checks that all Terraform configuration files adhere to a canonical format + - name: Terraform Format + run: terraform fmt -check + + # Generates an execution plan for Terraform + - name: Terraform Plan + run: terraform plan + + # On push to master, build or change infrastructure according to Terraform configuration files + # Note: It is recommended to set up a required "strict" status check in your repository for "Terraform Cloud". See the documentation on "strict" required status checks for more information: https://help.github.com/en/github/administering-a-repository/types-of-required-status-checks + - name: Terraform Apply + if: github.ref == 'refs/heads/master' && github.event_name == 'push' + run: terraform apply -auto-approve From 20e3ada1882119804c0694656a1af1a0cca6a12b Mon Sep 17 00:00:00 2001 From: John Bohannon Date: Tue, 28 Apr 2020 14:28:36 -0400 Subject: [PATCH 24/60] Create terraform.properties.json --- ci/properties/terraform.properties.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 ci/properties/terraform.properties.json diff --git a/ci/properties/terraform.properties.json b/ci/properties/terraform.properties.json new file mode 100644 index 0000000..34fa16e --- /dev/null +++ b/ci/properties/terraform.properties.json @@ -0,0 +1,6 @@ +{ + "name": "Terraform", + "description": "Set up Terraform CLI in your GitHub Actions workflow.", + "iconName": "terraform", + "categories": null +} From ad5ca30863406c2318b308371ad2583fbe7ccdf5 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Tue, 28 Apr 2020 14:50:43 -0400 Subject: [PATCH 25/60] Updated the Wpf dotnetcore icon to dotnetcore --- ci/properties/wpf-dotnet-core.properties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/properties/wpf-dotnet-core.properties.json b/ci/properties/wpf-dotnet-core.properties.json index 56eea90..f43ea35 100644 --- a/ci/properties/wpf-dotnet-core.properties.json +++ b/ci/properties/wpf-dotnet-core.properties.json @@ -1,6 +1,6 @@ { "name": "WPF .NET Core", "description": "Build, test and publish a Wpf application built on .NET Core.", - "iconName": "WPF", + "iconName": "dotnetcore", "categories": ["C#", "Visual Basic", "WPF", ".NET"] } \ No newline at end of file From adc9b70b375feb2636fa334cc0a0ea9c4347e33f Mon Sep 17 00:00:00 2001 From: John Bohannon Date: Tue, 28 Apr 2020 14:59:11 -0400 Subject: [PATCH 26/60] Add files via upload --- icons/terraform.svg | 1 + 1 file changed, 1 insertion(+) create mode 100644 icons/terraform.svg diff --git a/icons/terraform.svg b/icons/terraform.svg new file mode 100644 index 0000000..718fc0f --- /dev/null +++ b/icons/terraform.svg @@ -0,0 +1 @@ +terraform-icon logo \ No newline at end of file From d5e8e87192c1090f4e9c4e2763bafaf138064ce7 Mon Sep 17 00:00:00 2001 From: mingshun Date: Wed, 29 Apr 2020 09:43:42 +0800 Subject: [PATCH 27/60] Add Tencent Cloud icon --- icons/tencentcloud.svg | 43 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 icons/tencentcloud.svg diff --git a/icons/tencentcloud.svg b/icons/tencentcloud.svg new file mode 100644 index 0000000..0dad590 --- /dev/null +++ b/icons/tencentcloud.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + From 03bcd683793b6285482a83f5c16c49ad11143bad Mon Sep 17 00:00:00 2001 From: mingshun Date: Wed, 29 Apr 2020 09:49:34 +0800 Subject: [PATCH 28/60] Rename workflow to be the platform --- ci/properties/tencent.properties.json | 2 +- ci/tencent.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/properties/tencent.properties.json b/ci/properties/tencent.properties.json index d93a25e..1399885 100644 --- a/ci/properties/tencent.properties.json +++ b/ci/properties/tencent.properties.json @@ -1,5 +1,5 @@ { - "name": "Build and Deploy to TKE", + "name": "Tencent Kubernetes Engine", "description": "Build a Docker container, publish it to TKE Registry, and deploy to TKE cluster.", "iconName": "tencentcloud", "categories": ["Dockerfile"] diff --git a/ci/tencent.yml b/ci/tencent.yml index 8b937bc..308a1ee 100644 --- a/ci/tencent.yml +++ b/ci/tencent.yml @@ -13,7 +13,7 @@ # # 3. Change the values for the TKE_IMAGE_URL, TKE_REGION, TKE_CLUSTER_ID and DEPLOYMENT_NAME environment variables (below). -name: Build and Deploy to TKE +name: Tencent Kubernetes Engine on: push: From e5ca8224887e7649b270def58205014b53169e57 Mon Sep 17 00:00:00 2001 From: mingshun Date: Wed, 29 Apr 2020 10:00:35 +0800 Subject: [PATCH 29/60] Change the event that the workflow --- ci/tencent.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/ci/tencent.yml b/ci/tencent.yml index 308a1ee..e0c0a82 100644 --- a/ci/tencent.yml +++ b/ci/tencent.yml @@ -16,9 +16,8 @@ name: Tencent Kubernetes Engine on: - push: - branches: - - master + release: + types: [created] # Environment variables available to all jobs and steps in this workflow env: From c411e74e2305816ff2042179011a265f7574bbd7 Mon Sep 17 00:00:00 2001 From: mingshun Date: Wed, 29 Apr 2020 10:02:53 +0800 Subject: [PATCH 30/60] Modify workflow description --- ci/properties/tencent.properties.json | 2 +- ci/tencent.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/properties/tencent.properties.json b/ci/properties/tencent.properties.json index 1399885..8bbf29f 100644 --- a/ci/properties/tencent.properties.json +++ b/ci/properties/tencent.properties.json @@ -1,6 +1,6 @@ { "name": "Tencent Kubernetes Engine", - "description": "Build a Docker container, publish it to TKE Registry, and deploy to TKE cluster.", + "description": "This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE).", "iconName": "tencentcloud", "categories": ["Dockerfile"] } diff --git a/ci/tencent.yml b/ci/tencent.yml index e0c0a82..2d4ad03 100644 --- a/ci/tencent.yml +++ b/ci/tencent.yml @@ -1,4 +1,4 @@ -# This workflow will build a docker container, publish it to TKE Registry, and deploy it to TKE. +# This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE). # # To configure this workflow: # From 782ef792562f002c820e2ec1e439990801f2aba1 Mon Sep 17 00:00:00 2001 From: mingshun Date: Thu, 30 Apr 2020 11:08:09 +0800 Subject: [PATCH 31/60] Update tencentcloud icon --- icons/tencentcloud.svg | 72 +++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 43 deletions(-) diff --git a/icons/tencentcloud.svg b/icons/tencentcloud.svg index 0dad590..af729a4 100644 --- a/icons/tencentcloud.svg +++ b/icons/tencentcloud.svg @@ -1,43 +1,29 @@ - - - - - - - - - - - - - - - - - - - - + + + + 矩归 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 89ffdad1157564857ca95ddc12c985488dec49aa Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 30 Apr 2020 16:31:20 -0700 Subject: [PATCH 32/60] Set categories to `null` to be in sync with other workflows --- ci/properties/tencent.properties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/properties/tencent.properties.json b/ci/properties/tencent.properties.json index 8bbf29f..b3d9d3f 100644 --- a/ci/properties/tencent.properties.json +++ b/ci/properties/tencent.properties.json @@ -2,5 +2,5 @@ "name": "Tencent Kubernetes Engine", "description": "This workflow will build a docker container, publish and deploy it to Tencent Kubernetes Engine (TKE).", "iconName": "tencentcloud", - "categories": ["Dockerfile"] + "categories": null } From 951dfd0da3eea05f7a3e56adebf433243d15f37f Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Fri, 1 May 2020 06:56:47 -0400 Subject: [PATCH 33/60] Update the description with the proper case Update the "Wpf" in the description to "WPF" to reflect the proper case. --- ci/properties/wpf-dotnet-core.properties.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/properties/wpf-dotnet-core.properties.json b/ci/properties/wpf-dotnet-core.properties.json index f43ea35..c083d71 100644 --- a/ci/properties/wpf-dotnet-core.properties.json +++ b/ci/properties/wpf-dotnet-core.properties.json @@ -1,6 +1,6 @@ { "name": "WPF .NET Core", - "description": "Build, test and publish a Wpf application built on .NET Core.", + "description": "Build, test and publish a WPF application built on .NET Core.", "iconName": "dotnetcore", "categories": ["C#", "Visual Basic", "WPF", ".NET"] -} \ No newline at end of file +} From 4931fda2f655ab7cee8622c3285269814e1370e8 Mon Sep 17 00:00:00 2001 From: Ayesh Karunaratne Date: Fri, 1 May 2020 23:46:47 +0700 Subject: [PATCH 34/60] PHP: Remove deprectated composer --no-suggest From Composer v2, `--no-suggest` option is removed: https://php.watch/articles/composer-2 --- ci/php.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/php.yml b/ci/php.yml index 9d1b435..989deb2 100644 --- a/ci/php.yml +++ b/ci/php.yml @@ -18,7 +18,7 @@ jobs: run: composer validate - name: Install dependencies - run: composer install --prefer-dist --no-progress --no-suggest + run: composer install --prefer-dist --no-progress # Add a test script to composer.json, for instance: "test": "vendor/bin/phpunit" # Docs: https://getcomposer.org/doc/articles/scripts.md From f543db49dbe97d4ae5d508a05dfb9f6e630227a7 Mon Sep 17 00:00:00 2001 From: Tim Dorr Date: Fri, 1 May 2020 18:53:57 -0400 Subject: [PATCH 35/60] Fix source image name on docker tag This resolves an issue created by #472 --- ci/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker-publish.yml b/ci/docker-publish.yml index 1a1805f..9e80e76 100644 --- a/ci/docker-publish.yml +++ b/ci/docker-publish.yml @@ -72,5 +72,5 @@ jobs: echo IMAGE_ID=$IMAGE_ID echo VERSION=$VERSION - docker tag image $IMAGE_ID:$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION docker push $IMAGE_ID:$VERSION From dd7519f49ef5673e46a4eaafa1f862977510b465 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Sun, 3 May 2020 07:57:14 -0400 Subject: [PATCH 36/60] Rename the workflow files and properties files from WPF to Desktop. --- ci/{wpf-dotnet-core.yml => dotnet-core-desktop.yml} | 10 +++++----- ci/properties/dotnet-core-desktop.properties.json | 6 ++++++ ci/properties/wpf-dotnet-core.properties.json | 6 ------ 3 files changed, 11 insertions(+), 11 deletions(-) rename ci/{wpf-dotnet-core.yml => dotnet-core-desktop.yml} (94%) create mode 100644 ci/properties/dotnet-core-desktop.properties.json delete mode 100644 ci/properties/wpf-dotnet-core.properties.json diff --git a/ci/wpf-dotnet-core.yml b/ci/dotnet-core-desktop.yml similarity index 94% rename from ci/wpf-dotnet-core.yml rename to ci/dotnet-core-desktop.yml index 80ec3e5..0b9e454 100644 --- a/ci/wpf-dotnet-core.yml +++ b/ci/dotnet-core-desktop.yml @@ -3,9 +3,9 @@ # separate terms of service, privacy policy, and support # documentation. -# This workflow will build, test and package a WPF desktop application +# This workflow will build, test and package a WPF or Windows Forms desktop application # built on .NET Core. -# To learn how to migrate your existing WPF application to .NET Core, +# To learn how to migrate your existing application to .NET Core, # refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework # # To configure this workflow: @@ -36,7 +36,7 @@ # For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications, # refer to https://github.com/microsoft/github-actions-for-desktop-apps -name: WPF .NET Core +name: .NET Core Desktop on: push: @@ -81,8 +81,8 @@ jobs: - name: Execute unit tests run: dotnet test - # Restore the WPF application to populate the obj folder with RuntimeIdentifiers - - name: Restore the WPF application + # Restore the application to populate the obj folder with RuntimeIdentifiers + - name: Restore the application run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration env: Configuration: ${{ matrix.configuration }} diff --git a/ci/properties/dotnet-core-desktop.properties.json b/ci/properties/dotnet-core-desktop.properties.json new file mode 100644 index 0000000..e796c4a --- /dev/null +++ b/ci/properties/dotnet-core-desktop.properties.json @@ -0,0 +1,6 @@ +{ + "name": ".NET Core Desktop", + "description": "Build, test and publish a Wpf or Windows Forms application built on .NET Core.", + "iconName": "dotnetcore", + "categories": ["C#", "Visual Basic", "WPF", ".NET", "WindowsForms"] +} \ No newline at end of file diff --git a/ci/properties/wpf-dotnet-core.properties.json b/ci/properties/wpf-dotnet-core.properties.json deleted file mode 100644 index f43ea35..0000000 --- a/ci/properties/wpf-dotnet-core.properties.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "WPF .NET Core", - "description": "Build, test and publish a Wpf application built on .NET Core.", - "iconName": "dotnetcore", - "categories": ["C#", "Visual Basic", "WPF", ".NET"] -} \ No newline at end of file From 6ea0e1fa1691de713c156c6925517d4f2e88d7d1 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Sun, 3 May 2020 08:04:10 -0400 Subject: [PATCH 37/60] Reword the description. --- ci/properties/dotnet-core-desktop.properties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/properties/dotnet-core-desktop.properties.json b/ci/properties/dotnet-core-desktop.properties.json index e796c4a..0299220 100644 --- a/ci/properties/dotnet-core-desktop.properties.json +++ b/ci/properties/dotnet-core-desktop.properties.json @@ -1,6 +1,6 @@ { "name": ".NET Core Desktop", - "description": "Build, test and publish a Wpf or Windows Forms application built on .NET Core.", + "description": "Build, test, sign and publish a desktop application built on .NET Core.", "iconName": "dotnetcore", "categories": ["C#", "Visual Basic", "WPF", ".NET", "WindowsForms"] } \ No newline at end of file From fc935ad05273b7b0a0e889cee47b1807c139f8ac Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Sun, 3 May 2020 08:12:18 -0400 Subject: [PATCH 38/60] Added 'sign' to the workflow description. --- ci/dotnet-core-desktop.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/dotnet-core-desktop.yml b/ci/dotnet-core-desktop.yml index 0b9e454..ed37b70 100644 --- a/ci/dotnet-core-desktop.yml +++ b/ci/dotnet-core-desktop.yml @@ -3,7 +3,7 @@ # separate terms of service, privacy policy, and support # documentation. -# This workflow will build, test and package a WPF or Windows Forms desktop application +# This workflow will build, test, sign and package a WPF or Windows Forms desktop application # built on .NET Core. # To learn how to migrate your existing application to .NET Core, # refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework From 72408e6c620fc830ea97457baf6916d92b0352dc Mon Sep 17 00:00:00 2001 From: Ankit Popli Date: Sun, 10 May 2020 13:47:21 +0530 Subject: [PATCH 39/60] fix: use the IMAGE_NAME variable current behavior: changing the IMAGE_NAME variable breaks the build expected behavior: changing the IMAGE_NAME should not break the build --- ci/docker-publish.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/docker-publish.yml b/ci/docker-publish.yml index 1a1805f..9e80e76 100644 --- a/ci/docker-publish.yml +++ b/ci/docker-publish.yml @@ -72,5 +72,5 @@ jobs: echo IMAGE_ID=$IMAGE_ID echo VERSION=$VERSION - docker tag image $IMAGE_ID:$VERSION + docker tag $IMAGE_NAME $IMAGE_ID:$VERSION docker push $IMAGE_ID:$VERSION From 4e9268c2d390db4f2a7694c5f7d25ec6e1d748b3 Mon Sep 17 00:00:00 2001 From: Konrad Pabjan Date: Tue, 12 May 2020 10:49:36 +0200 Subject: [PATCH 40/60] Bump setup-python from v1 to v2 --- ci/python-app.yml | 2 +- ci/python-package.yml | 2 +- ci/python-publish.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/python-app.yml b/ci/python-app.yml index 900e442..c7f5067 100644 --- a/ci/python-app.yml +++ b/ci/python-app.yml @@ -17,7 +17,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python 3.8 - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: 3.8 - name: Install dependencies diff --git a/ci/python-package.yml b/ci/python-package.yml index b425371..f1abc2f 100644 --- a/ci/python-package.yml +++ b/ci/python-package.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/ci/python-publish.yml b/ci/python-publish.yml index d5f3859..4e1ef42 100644 --- a/ci/python-publish.yml +++ b/ci/python-publish.yml @@ -15,7 +15,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Set up Python - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: '3.x' - name: Install dependencies From 5802cb730239f3f1da75deb599a9ab0f178e479a Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Fri, 15 May 2020 16:49:20 -0700 Subject: [PATCH 41/60] Add script and workflow to sync the set of starter-workflows for GHES --- .github/workflows/sync_ghes.yaml | 26 ++++++ .gitignore | 1 + .vscode/launch.json | 21 +++++ script/exec.ts | 42 +++++++++ script/index.ts | 144 +++++++++++++++++++++++++++++++ script/package-lock.json | 112 ++++++++++++++++++++++++ script/package.json | 19 ++++ script/settings.json | 20 +++++ script/tsconfig.json | 5 ++ 9 files changed, 390 insertions(+) create mode 100644 .github/workflows/sync_ghes.yaml create mode 100644 .gitignore create mode 100644 .vscode/launch.json create mode 100644 script/exec.ts create mode 100755 script/index.ts create mode 100644 script/package-lock.json create mode 100644 script/package.json create mode 100644 script/settings.json create mode 100644 script/tsconfig.json diff --git a/.github/workflows/sync_ghes.yaml b/.github/workflows/sync_ghes.yaml new file mode 100644 index 0000000..6a0be1b --- /dev/null +++ b/.github/workflows/sync_ghes.yaml @@ -0,0 +1,26 @@ +on: + push: + branches: + - master + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + git fetch --no-tags --prune --depth=1 origin +refs/heads/*:refs/remotes/origin/* + git config user.email "cschleiden@github.com" + git config user.name "GitHub Actions" + - uses: actions/setup-node@v1 + with: + node-version: '12' + - name: Check starter workflows for GHES compat + run: | + npm ci + npx ts-node-script ./index.ts + working-directory: ./script + - run: | + git add -A + git commit -m "Updating GHES workflows" + - run: git push \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d844aa1 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +script/node_modules \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..a5cc146 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "args": ["${workspaceRoot}/script/index.ts"], + "runtimeArgs": ["-r", "ts-node/register"], + "cwd": "${workspaceRoot}/script", + "protocol": "inspector", + "internalConsoleOptions": "openOnSessionStart", + "env": { + "TS_NODE_IGNORE": "false" + } + } + ] +} \ No newline at end of file diff --git a/script/exec.ts b/script/exec.ts new file mode 100644 index 0000000..e529324 --- /dev/null +++ b/script/exec.ts @@ -0,0 +1,42 @@ +import { spawn } from "child_process"; + +export class ExecResult { + stdout = ""; + exitCode = 0; +} + +/** + * Executes a process + */ +export async function exec( + command: string, + args: string[] = [], + allowAllExitCodes: boolean = false +): Promise { + process.stdout.write(`EXEC: ${command} ${args.join(" ")}\n`); + return new Promise((resolve, reject) => { + const execResult = new ExecResult(); + const cp = spawn(command, args, {}); + + // STDOUT + cp.stdout.on("data", (data) => { + process.stdout.write(data); + execResult.stdout += data.toString(); + }); + + // STDERR + cp.stderr.on("data", (data) => { + process.stderr.write(data); + }); + + // Close + cp.on("close", (code) => { + execResult.exitCode = code; + if (code === 0 || allowAllExitCodes) { + resolve(execResult); + } else { + reject(new Error(`Command exited with code ${code}`)); + } + }); + }); +} diff --git a/script/index.ts b/script/index.ts new file mode 100755 index 0000000..943ffc3 --- /dev/null +++ b/script/index.ts @@ -0,0 +1,144 @@ +#!/usr/bin/env npx ts-node +import { promises as fs } from "fs"; +import { safeLoad } from "js-yaml"; +import { basename, extname, join } from "path"; +import { exec } from "./exec"; + +interface WorkflowDesc { + folder: string; + id: string; +} + +interface WorkflowsCheckResult { + compatibleWorkflows: WorkflowDesc[]; + incompatibleWorkflows: WorkflowDesc[]; +} + +async function checkWorkflows( + folders: string[], + enabledActions: string[] +): Promise { + const result: WorkflowsCheckResult = { + compatibleWorkflows: [], + incompatibleWorkflows: [], + }; + + for (const folder of folders) { + const dir = await fs.readdir(folder, { + withFileTypes: true, + }); + + for (const e of dir) { + if (e.isFile()) { + const workflowFilePath = join(folder, e.name); + const enabled = await checkWorkflow(workflowFilePath, enabledActions); + + const workflowDesc: WorkflowDesc = { + folder, + id: basename(e.name, extname(e.name)), + }; + + if (!enabled) { + result.incompatibleWorkflows.push(workflowDesc); + } else { + result.compatibleWorkflows.push(workflowDesc); + } + } + } + } + + return result; +} + +/** + * Check if a workflow only the given set of actions. + * + * @param workflowPath Path to workflow yaml file + * @param enabledActions List of enabled actions + */ +async function checkWorkflow( + workflowPath: string, + enabledActions: string[] +): Promise { + // Create set with lowercase action names for easier, case-insensitive lookup + const enabledActionsSet = new Set(enabledActions.map((x) => x.toLowerCase())); + + try { + const workflowFileContent = await fs.readFile(workflowPath, "utf8"); + const workflow = safeLoad(workflowFileContent); + + for (const job of Object.keys(workflow.jobs || {}).map( + (k) => workflow.jobs[k] + )) { + for (const step of job.steps || []) { + if (!!step.uses) { + // Check if allowed action + const [actionName, _] = step.uses.split("@"); + if (!enabledActionsSet.has(actionName.toLowerCase())) { + return false; + } + } + } + } + + // All used actions are enabled πŸŽ‰ + return true; + } catch (e) { + console.error("Error while checking workflow", e); + throw e; + } +} + +(async function main() { + try { + const settings = require("./settings.json"); + + const result = await checkWorkflows( + settings.folders, + settings.enabledActions + ); + + console.group( + `Found ${result.compatibleWorkflows.length} starter workflows compatible with GHES:` + ); + console.log( + result.compatibleWorkflows.map((x) => `${x.folder}/${x.id}`).join("\n") + ); + console.groupEnd(); + + console.group( + `Ignored ${result.incompatibleWorkflows.length} starter-workflows incompatible with GHES:` + ); + console.log( + result.incompatibleWorkflows.map((x) => `${x.folder}/${x.id}`).join("\n") + ); + console.groupEnd(); + + console.log("Switch to GHES branch"); + await exec("git", ["checkout", "ghes"]); + + // In order to sync from master, we might need to remove some workflows, add some + // and modify others. The lazy approach is to delete all workflows first, and then + // just bring the compatible ones over from the master branch. We let git figure out + // whether it's a deletion, add, or modify and commit the new state. + console.log("Remove all workflows"); + await exec("rm", ["-fr", ...settings.folders]); + + console.log("Sync changes from master for compatible workflows"); + await exec("git", [ + "checkout", + "master", + "--", + ...Array.prototype.concat.apply( + [], + result.compatibleWorkflows.map((x) => [ + join(x.folder, `${x.id}.yml`), + join(x.folder, "properties", `${x.id}.properties.json`), + ]) + ), + ]); + } catch (e) { + console.error("Unhandled error while syncing workflows", e); + process.exitCode = 1; + } +})(); diff --git a/script/package-lock.json b/script/package-lock.json new file mode 100644 index 0000000..ebcd318 --- /dev/null +++ b/script/package-lock.json @@ -0,0 +1,112 @@ +{ + "name": "sync-ghes-actions", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/js-yaml": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.4.tgz", + "integrity": "sha512-fYMgzN+9e28R81weVN49inn/u798ruU91En1ZnGvSZzCRc5jXx9B2EDhlRaWmcO1RIxFHL8AajRXzxDuJu93+A==", + "dev": true + }, + "@types/node": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", + "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ts-node": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", + "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "typescript": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz", + "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/script/package.json b/script/package.json new file mode 100644 index 0000000..c3c9872 --- /dev/null +++ b/script/package.json @@ -0,0 +1,19 @@ +{ + "name": "sync-ghes-actions", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "github/c2c-actions-experience", + "license": "MIT", + "devDependencies": { + "@types/js-yaml": "^3.12.4", + "@types/node": "^14.0.1", + "ts-node": "^8.10.1", + "typescript": "^3.9.2" + }, + "dependencies": { + "js-yaml": "^3.13.1" + } +} diff --git a/script/settings.json b/script/settings.json new file mode 100644 index 0000000..977c6f5 --- /dev/null +++ b/script/settings.json @@ -0,0 +1,20 @@ +{ + "folders": [ + "../ci", + "../automation" + ], + "enabledActions": [ + "actions/checkout", + "actions/create-release", + "actions/delete-package-versions", + "actions/download-artifact", + "actions/setup-dotnet", + "actions/setup-go", + "actions/setup-java", + "actions/setup-node", + "actions/stale", + "actions/starter-workflows", + "actions/upload-artifact", + "actions/upload-release-asset" + ] +} diff --git a/script/tsconfig.json b/script/tsconfig.json new file mode 100644 index 0000000..7c50a20 --- /dev/null +++ b/script/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + }, + "include": ["*.ts"] +} \ No newline at end of file From 641db8990d62826105984a170af3a1ee916e79c6 Mon Sep 17 00:00:00 2001 From: Steve Martinelli Date: Sun, 17 May 2020 22:16:42 -0400 Subject: [PATCH 42/60] clean up IBM title and icon using a different icon for IBM Cloud, ran svgo on it, too. --- ci/properties/ibm.properties.json | 4 +- icons/ibm.svg | 62 +------------------------------ 2 files changed, 3 insertions(+), 63 deletions(-) diff --git a/ci/properties/ibm.properties.json b/ci/properties/ibm.properties.json index 44d8996..59aa8ab 100644 --- a/ci/properties/ibm.properties.json +++ b/ci/properties/ibm.properties.json @@ -1,6 +1,6 @@ { - "name": "Build and Deploy to IKS", - "description": "Build a docker container, publish it to IBM Container Registry, and deploy to IKS.", + "name": "Deploy to IBM Kubernetes Service", + "description": "Build a docker container, publish it to IBM Container Registry, and deploy to IBM Kubernetes Service.", "iconName": "ibm", "categories": null } \ No newline at end of file diff --git a/icons/ibm.svg b/icons/ibm.svg index 3732033..7139661 100644 --- a/icons/ibm.svg +++ b/icons/ibm.svg @@ -1,61 +1 @@ - - - - -Created by potrace 1.16, written by Peter Selinger 2001-2019 - - - - - - - - - - - - + \ No newline at end of file From e16f45a27fbee43beb5a95ff4d7ae2a265b528d2 Mon Sep 17 00:00:00 2001 From: Steve Martinelli <4118756+stevemar@users.noreply.github.com> Date: Mon, 18 May 2020 23:13:25 -0400 Subject: [PATCH 43/60] Update ibm.properties.json one last tweak on official name --- ci/properties/ibm.properties.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/properties/ibm.properties.json b/ci/properties/ibm.properties.json index 59aa8ab..25ebf8a 100644 --- a/ci/properties/ibm.properties.json +++ b/ci/properties/ibm.properties.json @@ -1,6 +1,6 @@ { - "name": "Deploy to IBM Kubernetes Service", - "description": "Build a docker container, publish it to IBM Container Registry, and deploy to IBM Kubernetes Service.", + "name": "Deploy to IBM Cloud Kubernetes Service", + "description": "Build a docker container, publish it to IBM Cloud Container Registry, and deploy to IBM Cloud Kubernetes Service.", "iconName": "ibm", "categories": null -} \ No newline at end of file +} From 62f6872b4ea8dd11b34ded263418d156067e6d15 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Wed, 20 May 2020 10:00:39 -0700 Subject: [PATCH 44/60] Move ghes-sync into subfolder --- .github/workflows/sync_ghes.yaml | 2 +- .gitignore | 2 +- script/{ => sync-ghes}/exec.ts | 0 script/{ => sync-ghes}/index.ts | 5 ++++- script/{ => sync-ghes}/package-lock.json | 0 script/{ => sync-ghes}/package.json | 0 script/{ => sync-ghes}/settings.json | 0 script/{ => sync-ghes}/tsconfig.json | 0 8 files changed, 6 insertions(+), 3 deletions(-) rename script/{ => sync-ghes}/exec.ts (100%) rename script/{ => sync-ghes}/index.ts (95%) rename script/{ => sync-ghes}/package-lock.json (100%) rename script/{ => sync-ghes}/package.json (100%) rename script/{ => sync-ghes}/settings.json (100%) rename script/{ => sync-ghes}/tsconfig.json (100%) diff --git a/.github/workflows/sync_ghes.yaml b/.github/workflows/sync_ghes.yaml index 6a0be1b..0b1d289 100644 --- a/.github/workflows/sync_ghes.yaml +++ b/.github/workflows/sync_ghes.yaml @@ -19,7 +19,7 @@ jobs: run: | npm ci npx ts-node-script ./index.ts - working-directory: ./script + working-directory: ./script/sync-ghes - run: | git add -A git commit -m "Updating GHES workflows" diff --git a/.gitignore b/.gitignore index d844aa1..c5364f2 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -script/node_modules \ No newline at end of file +script/**/node_modules \ No newline at end of file diff --git a/script/exec.ts b/script/sync-ghes/exec.ts similarity index 100% rename from script/exec.ts rename to script/sync-ghes/exec.ts diff --git a/script/index.ts b/script/sync-ghes/index.ts similarity index 95% rename from script/index.ts rename to script/sync-ghes/index.ts index 943ffc3..c5633c2 100755 --- a/script/index.ts +++ b/script/sync-ghes/index.ts @@ -51,7 +51,7 @@ async function checkWorkflows( } /** - * Check if a workflow only the given set of actions. + * Check if a workflow uses only the given set of actions. * * @param workflowPath Path to workflow yaml file * @param enabledActions List of enabled actions @@ -75,6 +75,9 @@ async function checkWorkflow( // Check if allowed action const [actionName, _] = step.uses.split("@"); if (!enabledActionsSet.has(actionName.toLowerCase())) { + console.info( + `Workflow ${workflowPath} uses '${actionName}' which is not supported for GHES.` + ); return false; } } diff --git a/script/package-lock.json b/script/sync-ghes/package-lock.json similarity index 100% rename from script/package-lock.json rename to script/sync-ghes/package-lock.json diff --git a/script/package.json b/script/sync-ghes/package.json similarity index 100% rename from script/package.json rename to script/sync-ghes/package.json diff --git a/script/settings.json b/script/sync-ghes/settings.json similarity index 100% rename from script/settings.json rename to script/sync-ghes/settings.json diff --git a/script/tsconfig.json b/script/sync-ghes/tsconfig.json similarity index 100% rename from script/tsconfig.json rename to script/sync-ghes/tsconfig.json From 88d425bbe7b0a404065b83ddf3c08ae3b2d4581d Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Wed, 20 May 2020 10:40:26 -0700 Subject: [PATCH 45/60] Sync icons only for supported workflows --- script/sync-ghes/index.ts | 14 +++++++++++++- script/sync-ghes/settings.json | 4 ++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/script/sync-ghes/index.ts b/script/sync-ghes/index.ts index c5633c2..b63c124 100755 --- a/script/sync-ghes/index.ts +++ b/script/sync-ghes/index.ts @@ -7,6 +7,7 @@ import { exec } from "./exec"; interface WorkflowDesc { folder: string; id: string; + iconName: string; } interface WorkflowsCheckResult { @@ -33,9 +34,18 @@ async function checkWorkflows( const workflowFilePath = join(folder, e.name); const enabled = await checkWorkflow(workflowFilePath, enabledActions); + const workflowId = basename(e.name, extname(e.name)); + const workflowProperties = require(join( + folder, + "properties", + `${workflowId}.properties.json` + )); + const iconName = workflowProperties["iconName"]; + const workflowDesc: WorkflowDesc = { folder, - id: basename(e.name, extname(e.name)), + id: workflowId, + iconName, }; if (!enabled) { @@ -126,6 +136,7 @@ async function checkWorkflow( // whether it's a deletion, add, or modify and commit the new state. console.log("Remove all workflows"); await exec("rm", ["-fr", ...settings.folders]); + await exec("rm", ["-fr", "../../icons"]); console.log("Sync changes from master for compatible workflows"); await exec("git", [ @@ -137,6 +148,7 @@ async function checkWorkflow( result.compatibleWorkflows.map((x) => [ join(x.folder, `${x.id}.yml`), join(x.folder, "properties", `${x.id}.properties.json`), + join("../../icons", `${x.iconName}.svg`), ]) ), ]); diff --git a/script/sync-ghes/settings.json b/script/sync-ghes/settings.json index 977c6f5..050ea0a 100644 --- a/script/sync-ghes/settings.json +++ b/script/sync-ghes/settings.json @@ -1,7 +1,7 @@ { "folders": [ - "../ci", - "../automation" + "../../ci", + "../../automation" ], "enabledActions": [ "actions/checkout", From af4b66354beeefe58f5bba80e01cade27afcc9bd Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Wed, 20 May 2020 10:54:19 -0700 Subject: [PATCH 46/60] Only sync svg icons --- script/sync-ghes/index.ts | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/script/sync-ghes/index.ts b/script/sync-ghes/index.ts index b63c124..5390664 100755 --- a/script/sync-ghes/index.ts +++ b/script/sync-ghes/index.ts @@ -7,7 +7,8 @@ import { exec } from "./exec"; interface WorkflowDesc { folder: string; id: string; - iconName: string; + iconName?: string; + iconType?: "svg" | "octicon"; } interface WorkflowsCheckResult { @@ -40,12 +41,14 @@ async function checkWorkflows( "properties", `${workflowId}.properties.json` )); - const iconName = workflowProperties["iconName"]; + const iconName: string | undefined = workflowProperties["iconName"]; const workflowDesc: WorkflowDesc = { folder, id: workflowId, iconName, + iconType: + iconName && iconName.startsWith("octicon") ? "octicon" : "svg", }; if (!enabled) { @@ -145,11 +148,18 @@ async function checkWorkflow( "--", ...Array.prototype.concat.apply( [], - result.compatibleWorkflows.map((x) => [ - join(x.folder, `${x.id}.yml`), - join(x.folder, "properties", `${x.id}.properties.json`), - join("../../icons", `${x.iconName}.svg`), - ]) + result.compatibleWorkflows.map((x) => { + const r = [ + join(x.folder, `${x.id}.yml`), + join(x.folder, "properties", `${x.id}.properties.json`), + ]; + + if (x.iconType === "svg") { + r.push(join("../../icons", `${x.iconName}.svg`)); + } + + return r; + }) ), ]); } catch (e) { From 70c22e93a371758a899200e87f865d0df7ed3b6a Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Wed, 20 May 2020 11:39:30 -0700 Subject: [PATCH 47/60] Name GHES sync workflow --- .github/workflows/sync_ghes.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sync_ghes.yaml b/.github/workflows/sync_ghes.yaml index 0b1d289..397c173 100644 --- a/.github/workflows/sync_ghes.yaml +++ b/.github/workflows/sync_ghes.yaml @@ -1,3 +1,5 @@ +name: Sync workflows for GHES + on: push: branches: @@ -23,4 +25,4 @@ jobs: - run: | git add -A git commit -m "Updating GHES workflows" - - run: git push \ No newline at end of file + - run: git push From a83abcc8723c99e08ff18aa6efc3a5691d908918 Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Tue, 19 May 2020 09:51:39 -0700 Subject: [PATCH 48/60] Script to validate the main parts of workflow data --- .github/workflows/validate-data.yaml | 19 ++++ script/validate-data/index.ts | 116 +++++++++++++++++++++++ script/validate-data/package-lock.json | 122 +++++++++++++++++++++++++ script/validate-data/package.json | 21 +++++ script/validate-data/settings.json | 6 ++ script/validate-data/tsconfig.json | 5 + 6 files changed, 289 insertions(+) create mode 100644 .github/workflows/validate-data.yaml create mode 100755 script/validate-data/index.ts create mode 100644 script/validate-data/package-lock.json create mode 100644 script/validate-data/package.json create mode 100644 script/validate-data/settings.json create mode 100644 script/validate-data/tsconfig.json diff --git a/.github/workflows/validate-data.yaml b/.github/workflows/validate-data.yaml new file mode 100644 index 0000000..3abd612 --- /dev/null +++ b/.github/workflows/validate-data.yaml @@ -0,0 +1,19 @@ +on: + push: + pull_request: + +jobs: + sync: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-node@v1 + with: + node-version: "12" + + - name: Validate workflows + run: | + npm ci + npx ts-node-script ./index.ts + working-directory: ./script/validate-data diff --git a/script/validate-data/index.ts b/script/validate-data/index.ts new file mode 100755 index 0000000..0809372 --- /dev/null +++ b/script/validate-data/index.ts @@ -0,0 +1,116 @@ +#!/usr/bin/env npx ts-node +import { promises as fs } from "fs"; +import { safeLoad } from "js-yaml"; +import { basename, extname, join } from "path"; +import { Validator as validator } from "jsonschema"; +import { endGroup, error, setFailed, startGroup } from '@actions/core'; + +interface WorkflowWithErrors { + id: string; + errors: string[]; +} + +interface WorkflowProperties { + name: string; + description: string; + iconName: string; + categories: string[]; +} + +const propertiesSchema = { + type: "object", + properties: { + name: { type: "string", required: true }, + description: { type: "string", required: true }, + iconName: { type: "string", required: true }, + categories: { + anyOf: [ + { + type: "array", + items: { type: "string" } + }, + { + type: "null", + } + ], + required: true + }, + } +} + +async function checkWorkflows(folders: string[]): Promise { + const result: WorkflowWithErrors[] = [] + + for (const folder of folders) { + const dir = await fs.readdir(folder, { + withFileTypes: true, + }); + + for (const e of dir) { + if (e.isFile()) { + const fileType = basename(e.name, extname(e.name)) + + const workflowFilePath = join(folder, e.name); + const propertiesFilePath = join(folder, "properties", `${fileType}.properties.json`) + + const errors = await checkWorkflow(workflowFilePath, propertiesFilePath); + if (errors.errors.length > 0) { + result.push(errors) + } + } + } + } + + return result; +} + +async function checkWorkflow(workflowPath: string, propertiesPath: string): Promise { + let workflowErrors: WorkflowWithErrors = { + id: workflowPath, + errors: [] + } + + try { + const workflowFileContent = await fs.readFile(workflowPath, "utf8"); + safeLoad(workflowFileContent); // Validate yaml parses without error + + const propertiesFileContent = await fs.readFile(propertiesPath, "utf8") + const properties: WorkflowProperties = JSON.parse(propertiesFileContent) + + let v = new validator(); + const res = v.validate(properties, propertiesSchema) + workflowErrors.errors = res.errors.map(e => e.toString()) + + if (properties.iconName && !properties.iconName.startsWith("octicon")) { + try { + await fs.access(`../../icons/${properties.iconName}.svg`) + } catch (e) { + workflowErrors.errors.push(`No icon named ${properties.iconName} found`) + } + } + } catch (e) { + workflowErrors.errors.push(e.toString()) + } + return workflowErrors; +} + +(async function main() { + try { + const settings = require("./settings.json"); + const erroredWorkflows = await checkWorkflows( + settings.folders + ) + + if (erroredWorkflows.length > 0) { + startGroup(`Found ${erroredWorkflows.length} workflows with errors:`); + erroredWorkflows.forEach(erroredWorkflow => { + error(`Errors in ${erroredWorkflow.id} - ${erroredWorkflow.errors.map(e => e.toString()).join(", ")}`) + }) + endGroup(); + setFailed(`Found ${erroredWorkflows.length} workflows with errors`); + } + } catch (e) { + error(`Unhandled error while syncing workflows: ${e}`); + setFailed(`Unhandled error`) + } +})(); diff --git a/script/validate-data/package-lock.json b/script/validate-data/package-lock.json new file mode 100644 index 0000000..110d23f --- /dev/null +++ b/script/validate-data/package-lock.json @@ -0,0 +1,122 @@ +{ + "name": "sync-ghes-actions", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@actions/core": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.2.4.tgz", + "integrity": "sha512-YJCEq8BE3CdN8+7HPZ/4DxJjk/OkZV2FFIf+DlZTC/4iBlzYCD5yjRR6eiOS5llO11zbRltIRuKAjMKaWTE6cg==" + }, + "@types/js-yaml": { + "version": "3.12.4", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-3.12.4.tgz", + "integrity": "sha512-fYMgzN+9e28R81weVN49inn/u798ruU91En1ZnGvSZzCRc5jXx9B2EDhlRaWmcO1RIxFHL8AajRXzxDuJu93+A==", + "dev": true + }, + "@types/node": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.1.tgz", + "integrity": "sha512-FAYBGwC+W6F9+huFIDtn43cpy7+SzG+atzRiTfdp3inUKL2hXnd4rG8hylJLIh4+hqrQy1P17kvJByE/z825hA==", + "dev": true + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "js-yaml": { + "version": "3.13.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", + "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsonschema": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.2.6.tgz", + "integrity": "sha512-SqhURKZG07JyKKeo/ir24QnS4/BV7a6gQy93bUSe4lUdNp0QNpIz2c9elWJQ9dpc5cQYY6cvCzgRwy0MQCLyqA==" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "ts-node": { + "version": "8.10.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", + "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "typescript": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.2.tgz", + "integrity": "sha512-q2ktq4n/uLuNNShyayit+DTobV2ApPEo/6so68JaD5ojvc/6GClBipedB9zNWYxRSAlZXAe405Rlijzl6qDiSw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/script/validate-data/package.json b/script/validate-data/package.json new file mode 100644 index 0000000..a2b867d --- /dev/null +++ b/script/validate-data/package.json @@ -0,0 +1,21 @@ +{ + "name": "validate-data", + "version": "1.0.0", + "main": "index.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "github/c2c-actions-experience", + "license": "MIT", + "devDependencies": { + "@types/js-yaml": "^3.12.4", + "@types/node": "^14.0.1", + "ts-node": "^8.10.1", + "typescript": "^3.9.2" + }, + "dependencies": { + "@actions/core": "^1.2.4", + "js-yaml": "^3.13.1", + "jsonschema": "^1.2.6" + } +} \ No newline at end of file diff --git a/script/validate-data/settings.json b/script/validate-data/settings.json new file mode 100644 index 0000000..1913e2f --- /dev/null +++ b/script/validate-data/settings.json @@ -0,0 +1,6 @@ +{ + "folders": [ + "../../ci", + "../../automation" + ] +} \ No newline at end of file diff --git a/script/validate-data/tsconfig.json b/script/validate-data/tsconfig.json new file mode 100644 index 0000000..7c50a20 --- /dev/null +++ b/script/validate-data/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + }, + "include": ["*.ts"] +} \ No newline at end of file From 3dd92068cf9c54c6abf3c6ca67ce9e522020cad6 Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Tue, 19 May 2020 09:59:46 -0700 Subject: [PATCH 49/60] Add missing icons --- icons/aws.svg | 1 + icons/azure.svg | 1 + icons/googlegke.svg | 1 + 3 files changed, 3 insertions(+) create mode 100644 icons/aws.svg create mode 100644 icons/azure.svg create mode 100644 icons/googlegke.svg diff --git a/icons/aws.svg b/icons/aws.svg new file mode 100644 index 0000000..59ff870 --- /dev/null +++ b/icons/aws.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/azure.svg b/icons/azure.svg new file mode 100644 index 0000000..2ff63c1 --- /dev/null +++ b/icons/azure.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/icons/googlegke.svg b/icons/googlegke.svg new file mode 100644 index 0000000..68ecb39 --- /dev/null +++ b/icons/googlegke.svg @@ -0,0 +1 @@ +image/svg+xml \ No newline at end of file From 1bb722865287973f4e166189d67c1f20009c3854 Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Tue, 19 May 2020 10:04:07 -0700 Subject: [PATCH 50/60] Report success as well for visibility --- script/validate-data/index.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/script/validate-data/index.ts b/script/validate-data/index.ts index 0809372..dbea113 100755 --- a/script/validate-data/index.ts +++ b/script/validate-data/index.ts @@ -3,7 +3,7 @@ import { promises as fs } from "fs"; import { safeLoad } from "js-yaml"; import { basename, extname, join } from "path"; import { Validator as validator } from "jsonschema"; -import { endGroup, error, setFailed, startGroup } from '@actions/core'; +import { endGroup, error, info, setFailed, startGroup } from '@actions/core'; interface WorkflowWithErrors { id: string; @@ -102,12 +102,14 @@ async function checkWorkflow(workflowPath: string, propertiesPath: string): Prom ) if (erroredWorkflows.length > 0) { - startGroup(`Found ${erroredWorkflows.length} workflows with errors:`); + startGroup(`😟 - Found ${erroredWorkflows.length} workflows with errors:`); erroredWorkflows.forEach(erroredWorkflow => { error(`Errors in ${erroredWorkflow.id} - ${erroredWorkflow.errors.map(e => e.toString()).join(", ")}`) }) endGroup(); setFailed(`Found ${erroredWorkflows.length} workflows with errors`); + } else { + info("πŸŽ‰πŸ€˜ - Found no workflows with errors!") } } catch (e) { error(`Unhandled error while syncing workflows: ${e}`); From 74c1e87c6bb06c34c54405dda1276eadbabc8a81 Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Wed, 20 May 2020 16:31:20 -0700 Subject: [PATCH 51/60] =?UTF-8?q?Don=E2=80=99t=20fail=20if=20no=20changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/sync_ghes.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/sync_ghes.yaml b/.github/workflows/sync_ghes.yaml index 397c173..54193bd 100644 --- a/.github/workflows/sync_ghes.yaml +++ b/.github/workflows/sync_ghes.yaml @@ -24,5 +24,9 @@ jobs: working-directory: ./script/sync-ghes - run: | git add -A - git commit -m "Updating GHES workflows" + if [ -z "$(git status --porcelain)" ]; then + echo "No changes to commit" + else + git commit -m "Updating GHES workflows" + fi - run: git push From 9a0a11423d295d10201f83018c7cbfc38eca2b75 Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Wed, 20 May 2020 16:31:33 -0700 Subject: [PATCH 52/60] Name the workflow --- .github/workflows/validate-data.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/validate-data.yaml b/.github/workflows/validate-data.yaml index 3abd612..d923d73 100644 --- a/.github/workflows/validate-data.yaml +++ b/.github/workflows/validate-data.yaml @@ -1,3 +1,5 @@ +name: Validate Data + on: push: pull_request: From 15c78f880211e02929edf5ff0d59c225e9f11c69 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 21 May 2020 11:09:51 -0700 Subject: [PATCH 53/60] Do not sync workflows without categories to GHES --- script/sync-ghes/index.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/script/sync-ghes/index.ts b/script/sync-ghes/index.ts index 5390664..78a0dda 100755 --- a/script/sync-ghes/index.ts +++ b/script/sync-ghes/index.ts @@ -11,6 +11,16 @@ interface WorkflowDesc { iconType?: "svg" | "octicon"; } +interface WorkflowProperties { + name: string; + + description: string; + + iconName?: string; + + categories: string[] | null; +} + interface WorkflowsCheckResult { compatibleWorkflows: WorkflowDesc[]; incompatibleWorkflows: WorkflowDesc[]; @@ -33,15 +43,18 @@ async function checkWorkflows( for (const e of dir) { if (e.isFile()) { const workflowFilePath = join(folder, e.name); - const enabled = await checkWorkflow(workflowFilePath, enabledActions); - const workflowId = basename(e.name, extname(e.name)); - const workflowProperties = require(join( + const workflowProperties: WorkflowProperties = require(join( folder, "properties", `${workflowId}.properties.json` )); const iconName: string | undefined = workflowProperties["iconName"]; + const partnerWorkflow = workflowProperties.categories === null; + + const enabled = + !partnerWorkflow && + (await checkWorkflow(workflowFilePath, enabledActions)); const workflowDesc: WorkflowDesc = { folder, From ec3fe32d4355d58639c819a074ac7266c5b5821c Mon Sep 17 00:00:00 2001 From: Jonathan Clem Date: Thu, 21 May 2020 16:32:47 -0400 Subject: [PATCH 54/60] Define OTP/Elixir versions as strings As now [recommended](https://github.com/actions/setup-elixir/tree/2071beb570a53fb599fbd638d0a4f4577d57143d#usage) in the action's README, the configuration versions should be strings so that YAML parsing doesn't truncate something like `23.0` to `23`, which isn't equivalent. --- ci/elixir.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/elixir.yml b/ci/elixir.yml index 4de7dcb..ac918c8 100644 --- a/ci/elixir.yml +++ b/ci/elixir.yml @@ -16,8 +16,8 @@ jobs: - name: Setup elixir uses: actions/setup-elixir@v1 with: - elixir-version: 1.9.4 # Define the elixir version [required] - otp-version: 22.2 # Define the OTP version [required] + elixir-version: '1.9.4' # Define the elixir version [required] + otp-version: '22.2' # Define the OTP version [required] - name: Install Dependencies run: mix deps.get - name: Run Tests From 249441a642d6772b4531e1994d8056f9828953ae Mon Sep 17 00:00:00 2001 From: Cameron Booth Date: Thu, 21 May 2020 13:55:36 -0700 Subject: [PATCH 55/60] Update job name --- .github/workflows/validate-data.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/validate-data.yaml b/.github/workflows/validate-data.yaml index d923d73..20eee71 100644 --- a/.github/workflows/validate-data.yaml +++ b/.github/workflows/validate-data.yaml @@ -5,7 +5,7 @@ on: pull_request: jobs: - sync: + validate-data: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 From 0ac09546734a9b5eac78e60ccda8dae05f1c7d79 Mon Sep 17 00:00:00 2001 From: Edward Skrod Date: Thu, 21 May 2020 17:33:37 -0400 Subject: [PATCH 56/60] Remove WindowsForms --- ci/properties/dotnet-core-desktop.properties.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/properties/dotnet-core-desktop.properties.json b/ci/properties/dotnet-core-desktop.properties.json index 0299220..9b2aa35 100644 --- a/ci/properties/dotnet-core-desktop.properties.json +++ b/ci/properties/dotnet-core-desktop.properties.json @@ -2,5 +2,5 @@ "name": ".NET Core Desktop", "description": "Build, test, sign and publish a desktop application built on .NET Core.", "iconName": "dotnetcore", - "categories": ["C#", "Visual Basic", "WPF", ".NET", "WindowsForms"] + "categories": ["C#", "Visual Basic", "WPF", ".NET"] } \ No newline at end of file From de4411e09783092951dd168aa2651c251f4eb765 Mon Sep 17 00:00:00 2001 From: Christopher Schleiden Date: Thu, 21 May 2020 14:34:40 -0700 Subject: [PATCH 57/60] Ensure "blank" template is available --- script/sync-ghes/index.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/script/sync-ghes/index.ts b/script/sync-ghes/index.ts index 78a0dda..ea347cf 100755 --- a/script/sync-ghes/index.ts +++ b/script/sync-ghes/index.ts @@ -50,10 +50,12 @@ async function checkWorkflows( `${workflowId}.properties.json` )); const iconName: string | undefined = workflowProperties["iconName"]; + + const isBlankTemplate = workflowId === "blank"; const partnerWorkflow = workflowProperties.categories === null; const enabled = - !partnerWorkflow && + (isBlankTemplate || !partnerWorkflow) && (await checkWorkflow(workflowFilePath, enabledActions)); const workflowDesc: WorkflowDesc = { From 15d943af34246de3d046937a16740283b10808aa Mon Sep 17 00:00:00 2001 From: Nadav Ivgi Date: Sun, 24 May 2020 08:21:13 +0300 Subject: [PATCH 58/60] Rust: Enable cargo colors for prettier output --- ci/rust.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ci/rust.yml b/ci/rust.yml index 6738b0b..3c13d1b 100644 --- a/ci/rust.yml +++ b/ci/rust.yml @@ -6,6 +6,9 @@ on: pull_request: branches: [ master ] +env: + CARGO_TERM_COLOR: always + jobs: build: From 9d886e00f9a7aac1aba11fb202443f729fff1608 Mon Sep 17 00:00:00 2001 From: Andy McKay Date: Mon, 25 May 2020 12:55:49 -0700 Subject: [PATCH 59/60] Create main.yml --- .github/workflows/main.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..c6f2aa4 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,19 @@ +name: Close as a support issue +on: + issues: + types: [labeled] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Close Issue + uses: peter-evans/close-issue@v1 + if: contains(github.event.issue.labels.*.name, 'support') + with: + comment: | + Sorry, but we'd like to keep issues related to code in this repository. Thank you πŸ™‡ + + If you have questions about writing workflows or action files, then please [visit the GitHub Community Forum's Actions Board](https://github.community/t5/GitHub-Actions/bd-p/actions) + + If you are having an issue or question about GitHub Actions then please [contact customer support](https://help.github.com/en/articles/about-github-actions#contacting-support) From 861a79590c288877feeda13b1d1488b7e6ef6598 Mon Sep 17 00:00:00 2001 From: Andy McKay Date: Mon, 25 May 2020 12:57:07 -0700 Subject: [PATCH 60/60] Rename main.yml to label-close.yml --- .github/workflows/{main.yml => label-close.yml} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/workflows/{main.yml => label-close.yml} (100%) diff --git a/.github/workflows/main.yml b/.github/workflows/label-close.yml similarity index 100% rename from .github/workflows/main.yml rename to .github/workflows/label-close.yml