From da6c98dcf325214f109eb7ab18d47cfcfa40545c Mon Sep 17 00:00:00 2001 From: Egor Tensin Date: Fri, 25 Dec 2020 03:58:25 +0300 Subject: initial commit --- .gitattributes | 1 + .github/workflows/test.yml | 58 +++++++++++++++++++++++++++++++++++++++ LICENSE.txt | 21 +++++++++++++++ action.yml | 67 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 147 insertions(+) create mode 100644 .gitattributes create mode 100644 .github/workflows/test.yml create mode 100644 LICENSE.txt create mode 100644 action.yml diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..176a458 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +* text=auto diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 0000000..e5118cc --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,58 @@ +name: Test + +on: + push: + pull_request: + schedule: + # Weekly, at 5:45 AM on Friday (somewhat randomly chosen). + - cron: '45 5 * * 5' + workflow_dispatch: + +jobs: + test: + strategy: + fail-fast: false + matrix: + platform: [x86, x64] + cygwin: [0, 1] + os: [ubuntu-18.04, windows-2019, windows-2016] + + include: + # Prettier run names. + - {os: ubuntu-18.04, name: Ubuntu} + - {os: windows-2019, name: Windows Server 2019} + - {os: windows-2016, name: Windows Server 2016} + - {cygwin: 1, name: Cygwin} + exclude: + # No Cygwin on Ubuntu. + - {os: ubuntu-18.04, cygwin: 1} + # Cygwin is the same on Windows Server 2016 & 2019. + - {os: windows-2016, cygwin: 1} + + runs-on: '${{ matrix.os }}' + + name: '${{ matrix.name }} / ${{ matrix.platform }}' + + continue-on-error: ${{ (matrix.os == 'windows-2016' || matrix.os == 'windows-2019') && !matrix.cygwin }} + + defaults: + run: + shell: pwsh + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install Cygwin + uses: egor-tensin/setup-cygwin@master + with: + platform: '${{ matrix.platform }}' + if: matrix.cygwin + + - name: Set up GCC + uses: ./ + with: + platform: '${{ matrix.platform }}' + cygwin: '${{ matrix.cygwin }}' + + # I'm not really sure as to how to properly verify that it worked :-( diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..ab8c3ff --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Egor Tensin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/action.yml b/action.yml new file mode 100644 index 0000000..12c52b8 --- /dev/null +++ b/action.yml @@ -0,0 +1,67 @@ +name: Install GCC +description: Install GCC + +inputs: + platform: + description: Target platform + required: false + default: x64 + cygwin: + description: Install inside Cygwin + required: false + default: 0 + +runs: + using: composite + steps: + - id: setup + run: | + New-Variable os -Value '${{ runner.os }}' -Option Constant + + New-Variable linux_host -Value ($os -eq 'Linux') -Option Constant + New-Variable cygwin_host -Value ('${{ inputs.cygwin }}' -eq '1') -Option Constant + New-Variable windows_host -Value ($os -eq 'Windows' -and !$cygwin) -Option Constant + + New-Variable x64 -Value ('${{ inputs.platform }}' -eq 'x64') -Option Constant + + function Locate-Choco { + $path = Get-Command 'choco' -ErrorAction SilentlyContinue + if ($path) { + $path.Path + } else { + Join-Path ${env:ProgramData} 'chocolatey' 'bin' 'choco' + } + } + + if ($linux_host) { + sudo apt update + if ($x64) { + sudo apt install -y g++ + } else { + sudo apt install -y g++-multilib + } + } elseif ($cygwin_host) { + if (!$x64) { + echo @' + ::warning :: + 32-bit-targeting GCC is unstable and/or unmaintained on 64-bit Cygwin. + Please use 32-bit Cygwin instead. + If you _are_ using 32-bit Cygwin, you can ignore this message. + '@ + } + $choco = Locate-Choco + & $choco install -y --no-progress --source=cygwin gcc-g++ + } elseif ($windows_host) { + # TODO: use setup-mingw when calling composite actions within + # composite actions is implemented. + echo @' + ::error :: + Please use the egor-tensin/setup-mingw action to install GCC on Windows. + '@ + exit 1 + } + shell: pwsh + +branding: + icon: star + color: green -- cgit v1.2.3