diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..f2809f7 --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,2 @@ +name: A workflow for my Hello World file +on: push diff --git a/action-a/Dockerfile b/action-a/Dockerfile new file mode 100644 index 0000000..efa136f --- /dev/null +++ b/action-a/Dockerfile @@ -0,0 +1,88 @@ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. + +# Docker image file that describes an Alpine3.12 image with PowerShell installed from .tar.gz file(s) + +FROM alpine:3.12 AS installer-env + +# Define Args for the needed to add the package +ARG PS_VERSION=7.0.0 +ARG PS_PACKAGE=powershell-${PS_VERSION}-linux-alpine-x64.tar.gz +ARG PS_PACKAGE_URL=https://github.com/PowerShell/PowerShell/releases/download/v${PS_VERSION}/${PS_PACKAGE} +ARG PS_INSTALL_VERSION=7 + +# Download the Linux tar.gz and save it +ADD ${PS_PACKAGE_URL} /tmp/linux.tar.gz + +# define the folder we will be installing PowerShell to +ENV PS_INSTALL_FOLDER=/opt/microsoft/powershell/$PS_INSTALL_VERSION + +# Create the install folder +RUN mkdir -p ${PS_INSTALL_FOLDER} + +# Unzip the Linux tar.gz +RUN tar zxf /tmp/linux.tar.gz -C ${PS_INSTALL_FOLDER} -v + +# Start a new stage so we lose all the tar.gz layers from the final image +FROM alpine:3.12.1 + +# Copy only the files we need from the previous stage +COPY --from=installer-env ["/opt/microsoft/powershell", "/opt/microsoft/powershell"] + +# Define Args and Env needed to create links +ARG PS_INSTALL_VERSION=7 +ENV PS_INSTALL_FOLDER=/opt/microsoft/powershell/$PS_INSTALL_VERSION \ + \ + # Define ENVs for Localization/Globalization + DOTNET_SYSTEM_GLOBALIZATION_INVARIANT=false \ + LC_ALL=en_US.UTF-8 \ + LANG=en_US.UTF-8 \ + # set a fixed location for the Module analysis cache + PSModuleAnalysisCachePath=/var/cache/microsoft/powershell/PSModuleAnalysisCache/ModuleAnalysisCache \ + POWERSHELL_DISTRIBUTION_CHANNEL=PSDocker-Alpine-3.12 + +# Install dotnet dependencies and ca-certificates +RUN apk add --no-cache \ + ca-certificates \ + less \ + \ + # PSReadline/console dependencies + ncurses-terminfo-base \ + \ + # .NET Core dependencies + krb5-libs \ + libgcc \ + libintl \ + libssl1.1 \ + libstdc++ \ + tzdata \ + userspace-rcu \ + zlib \ + icu-libs \ + && apk -X https://dl-cdn.alpinelinux.org/alpine/edge/main add --no-cache \ + lttng-ust \ + \ + # PowerShell remoting over SSH dependencies + openssh-client \ + \ + # Create the pwsh symbolic link that points to powershell + && ln -s ${PS_INSTALL_FOLDER}/pwsh /usr/bin/pwsh \ + \ + # Give all user execute permissions and remove write permissions for others + && chmod a+x,o-w ${PS_INSTALL_FOLDER}/pwsh \ + # intialize powershell module cache + # and disable telemetry + && export POWERSHELL_TELEMETRY_OPTOUT=1 \ + && pwsh \ + -NoLogo \ + -NoProfile \ + -Command " \ + \$ErrorActionPreference = 'Stop' ; \ + \$ProgressPreference = 'SilentlyContinue' ; \ + while(!(Test-Path -Path \$env:PSModuleAnalysisCachePath)) { \ + Write-Host "'Waiting for $env:PSModuleAnalysisCachePath'" ; \ + Start-Sleep -Seconds 6 ; \ + }" + +CMD [ "pwsh" ] +ENTRYPOINT ["/entrypoint.sh"] diff --git a/action-a/action.yml b/action-a/action.yml new file mode 100644 index 0000000..1f28e37 --- /dev/null +++ b/action-a/action.yml @@ -0,0 +1,17 @@ +name: "Hello Actions" +description: "Greet someone" +author: "octocat@github.com" + +inputs: + MY_NAME: + description: "Who to greet" + required: true + default: "Max" + +runs: + using: "docker" + image: "Dockerfile" + +branding: + icon: "mic" + color: "purple" diff --git a/action-a/entrypoint.sh b/action-a/entrypoint.sh new file mode 100644 index 0000000..6a9d8e8 --- /dev/null +++ b/action-a/entrypoint.sh @@ -0,0 +1 @@ +pwsh -f hello.ps1 diff --git a/action-a/hello.ps1 b/action-a/hello.ps1 new file mode 100644 index 0000000..1499d50 --- /dev/null +++ b/action-a/hello.ps1 @@ -0,0 +1 @@ +{"Hello, {0}!" -f $env:MY_NAME}