From 3d8747231c56cb0d649e672411834ab04ac7b92e Mon Sep 17 00:00:00 2001 From: Tianon Gravi Date: Mon, 27 Apr 2020 11:43:14 -0700 Subject: [PATCH] Add initial GitHub Actions CI --- .appveyor.yml | 31 ---------------------- .github/workflows/ci.yml | 48 ++++++++++++++++++++++++++++++++++ .travis.yml | 56 ---------------------------------------- README.md | 11 ++++---- update.sh | 21 --------------- 5 files changed, 53 insertions(+), 114 deletions(-) delete mode 100644 .appveyor.yml create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.appveyor.yml b/.appveyor.yml deleted file mode 100644 index 82e57700..00000000 --- a/.appveyor.yml +++ /dev/null @@ -1,31 +0,0 @@ -version: build-{build}.{branch} -image: Visual Studio 2017 - -environment: - matrix: - - version: 1.14 - variant: windowsservercore-1809 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - - version: 1.14 - variant: windowsservercore-ltsc2016 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - - version: 1.13 - variant: windowsservercore-1809 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019 - - version: 1.13 - variant: windowsservercore-ltsc2016 - APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017 - -install: - - ps: | - [Environment]::SetEnvironmentVariable('dockerImage', ('golang:{0}' -f $env:version), [EnvironmentVariableTarget]::Process); - [Environment]::SetEnvironmentVariable('buildDirectory', ('{0}/windows/{1}' -f $env:version, $env:variant), [EnvironmentVariableTarget]::Process); - -build_script: - - cmd: appveyor-retry docker build --pull -t %dockerImage% %buildDirectory% - -after_build: - - ps: docker images - -test_script: - - ps: docker run --rm $env:dockerImage go version diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..155ef316 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: GitHub CI + +on: + pull_request: + push: + schedule: + - cron: 0 0 * * 0 + +defaults: + run: + shell: 'bash -Eeuo pipefail -x {0}' + +jobs: + + generate-jobs: + name: Generate Jobs + runs-on: ubuntu-latest + outputs: + strategy: ${{ steps.generate-jobs.outputs.strategy }} + steps: + - uses: actions/checkout@v1 + - id: generate-jobs + name: Generate Jobs + run: | + git clone --depth 1 https://github.com/docker-library/bashbrew.git -b master ~/bashbrew + strategy="$(~/bashbrew/scripts/github-actions/generate.sh)" + jq . <<<"$strategy" # sanity check / debugging aid + echo "::set-output name=strategy::$strategy" + + test: + needs: generate-jobs + strategy: ${{ fromJson(needs.generate-jobs.outputs.strategy) }} + name: ${{ matrix.name }} + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v1 + - name: Prepare Environment + run: ${{ matrix.runs.prepare }} + - name: Pull Dependencies + run: ${{ matrix.runs.pull }} + - name: Build ${{ matrix.name }} + run: ${{ matrix.runs.build }} + - name: History ${{ matrix.name }} + run: ${{ matrix.runs.history }} + - name: Test ${{ matrix.name }} + run: ${{ matrix.runs.test }} + - name: '"docker images"' + run: ${{ matrix.runs.images }} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 944f4f50..00000000 --- a/.travis.yml +++ /dev/null @@ -1,56 +0,0 @@ -language: bash -services: docker - -matrix: - include: - - os: linux - env: VERSION=1.14 VARIANT=buster - - os: linux - env: VERSION=1.14 VARIANT=stretch - - os: linux - env: VERSION=1.14 VARIANT=alpine3.11 - - os: linux - env: VERSION=1.13 VARIANT=buster - - os: linux - env: VERSION=1.13 VARIANT=stretch - - os: linux - env: VERSION=1.13 VARIANT=alpine3.11 - - os: linux - env: VERSION=1.13 VARIANT=alpine3.10 - -install: - - git clone https://github.com/docker-library/official-images.git ~/official-images - -before_script: - - env | sort - - cd "$VERSION${VARIANT:+/$VARIANT}" - - slash='/'; image="golang:$VERSION${VARIANT:+-${VARIANT//$slash/-}}" - -script: - - | - ( - set -Eeuo pipefail - set -x - docker build -t "$image" . - if [ "$TRAVIS_OS_NAME" = 'windows' ]; then - # TODO make the tests run successfully on Windows too! - docker run --rm "$image" go version - docker run --rm "$image" git --version - # if we've got nanoserver, let's build test that too - nanoserverDir="../nanoserver-${VARIANT#windows/windowsservercore-}" - if [ -f "$nanoserverDir/Dockerfile" ]; then - nanoserverImage="${image//windowsservercore/nanoserver}" - nanoserverFromWindows="$(awk -F '[ =]' '$1 == "COPY" && $2 == "--from" { print $3; exit }' "$nanoserverDir/Dockerfile")" # match "COPY --from=..." value - docker tag "$image" "$nanoserverFromWindows" - docker build -t "$nanoserverImage" "$nanoserverDir" - docker run --rm "$nanoserverImage" go version - fi - else - ~/official-images/test/run.sh "$image" - fi - ) - -after_script: - - docker images - -# vim:set et ts=2 sw=2: diff --git a/README.md b/README.md index 44292dd9..fa779b8e 100644 --- a/README.md +++ b/README.md @@ -14,14 +14,13 @@ For outstanding `golang` image PRs, check [PRs with the "library/golang" label o --- -- [![build status badge](https://img.shields.io/travis/docker-library/golang/master.svg?label=Travis%20CI)](https://travis-ci.org/docker-library/golang/branches) -- [![build status badge](https://img.shields.io/appveyor/ci/docker-library/golang/master.svg?label=AppVeyor)](https://ci.appveyor.com/project/docker-library/golang) -- [![build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/update.sh/job/golang.svg?label=Automated%20update.sh)](https://doi-janky.infosiftr.net/job/update.sh/job/golang) +- [![build status badge](https://img.shields.io/github/workflow/status/docker-library/golang/GitHub%20CI/master?label=GitHub%20CI)](https://github.com/docker-library/golang/actions?query=workflow%3A%22GitHub+CI%22+branch%3Amaster) +- [![build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/update.sh/job/golang.svg?label=Automated%20update.sh)](https://doi-janky.infosiftr.net/job/update.sh/job/golang/) | Build | Status | Badges | (per-arch) | |:-:|:-:|:-:|:-:| -| [![amd64 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/amd64/job/golang.svg?label=amd64)](https://doi-janky.infosiftr.net/job/multiarch/job/amd64/job/golang) | [![arm32v6 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm32v6/job/golang.svg?label=arm32v6)](https://doi-janky.infosiftr.net/job/multiarch/job/arm32v6/job/golang) | [![arm32v7 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm32v7/job/golang.svg?label=arm32v7)](https://doi-janky.infosiftr.net/job/multiarch/job/arm32v7/job/golang) | [![arm64v8 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm64v8/job/golang.svg?label=arm64v8)](https://doi-janky.infosiftr.net/job/multiarch/job/arm64v8/job/golang) | -| [![i386 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/i386/job/golang.svg?label=i386)](https://doi-janky.infosiftr.net/job/multiarch/job/i386/job/golang) | [![ppc64le build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/ppc64le/job/golang.svg?label=ppc64le)](https://doi-janky.infosiftr.net/job/multiarch/job/ppc64le/job/golang) | [![s390x build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/s390x/job/golang.svg?label=s390x)](https://doi-janky.infosiftr.net/job/multiarch/job/s390x/job/golang) | [![windows-amd64 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/windows-amd64/job/golang.svg?label=windows-amd64)](https://doi-janky.infosiftr.net/job/multiarch/job/windows-amd64/job/golang) | -| [![put-shared build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/put-shared/job/light/job/golang.svg?label=put-shared)](https://doi-janky.infosiftr.net/job/put-shared/job/light/job/golang) | +| [![amd64 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/amd64/job/golang.svg?label=amd64)](https://doi-janky.infosiftr.net/job/multiarch/job/amd64/job/golang/) | [![arm32v6 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm32v6/job/golang.svg?label=arm32v6)](https://doi-janky.infosiftr.net/job/multiarch/job/arm32v6/job/golang/) | [![arm32v7 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm32v7/job/golang.svg?label=arm32v7)](https://doi-janky.infosiftr.net/job/multiarch/job/arm32v7/job/golang/) | [![arm64v8 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/arm64v8/job/golang.svg?label=arm64v8)](https://doi-janky.infosiftr.net/job/multiarch/job/arm64v8/job/golang/) | +| [![i386 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/i386/job/golang.svg?label=i386)](https://doi-janky.infosiftr.net/job/multiarch/job/i386/job/golang/) | [![ppc64le build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/ppc64le/job/golang.svg?label=ppc64le)](https://doi-janky.infosiftr.net/job/multiarch/job/ppc64le/job/golang/) | [![s390x build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/s390x/job/golang.svg?label=s390x)](https://doi-janky.infosiftr.net/job/multiarch/job/s390x/job/golang/) | [![windows-amd64 build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/multiarch/job/windows-amd64/job/golang.svg?label=windows-amd64)](https://doi-janky.infosiftr.net/job/multiarch/job/windows-amd64/job/golang/) | +| [![put-shared build status badge](https://img.shields.io/jenkins/s/https/doi-janky.infosiftr.net/job/put-shared/job/light/job/golang.svg?label=put-shared)](https://doi-janky.infosiftr.net/job/put-shared/job/light/job/golang/) | diff --git a/update.sh b/update.sh index 4b09191b..354b7697 100755 --- a/update.sh +++ b/update.sh @@ -35,8 +35,6 @@ while [ "$pageToken" != 'null' ]; do pageToken="$(echo "$page" | jq -r '.nextPageToken')" done -travisEnv= -appveyorEnv= for version in "${versions[@]}"; do rcVersion="${version%-rc}" rcGrepV='-v' @@ -100,8 +98,6 @@ for version in "${versions[@]}"; do -e 's!%%SRC-SHA256%%!'"$srcSha256"'!g' \ -e 's!%%ARCH-CASE%%!'"$(sed_escape_rhs "$linuxArchCase")"'!g' \ "Dockerfile-${template}.template" > "$version/$variant/Dockerfile" - - travisEnv='\n - os: linux\n env: VERSION='"$version VARIANT=$variant$travisEnv" fi done @@ -115,25 +111,8 @@ for version in "${versions[@]}"; do -e 's!%%WIN-SHA256%%!'"$windowsSha256"'!g' \ -e 's!%%MICROSOFT-TAG%%!'"${winVariant#*-}"'!g' \ "Dockerfile-windows-${winVariant%%-*}.template" > "$version/windows/$winVariant/Dockerfile" - - case "$winVariant" in - nanoserver-*) ;; # nanoserver images COPY --from=...:...-windowsservercore-... - # https://www.appveyor.com/docs/windows-images-software/ - *-1809) - appveyorEnv='\n - version: '"$version"'\n variant: '"$winVariant"'\n APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019'"$appveyorEnv" - ;; - *-ltsc2016) - appveyorEnv='\n - version: '"$version"'\n variant: '"$winVariant"'\n APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017'"$appveyorEnv" - ;; - esac fi done echo "$version: $fullVersion ($srcSha256)" done - -travis="$(awk -v 'RS=\n\n' '$1 == "matrix:" { $0 = "matrix:\n include:'"$travisEnv"'" } { printf "%s%s", $0, RS }' .travis.yml)" -echo "$travis" > .travis.yml - -appveyor="$(awk -v 'RS=\n\n' '$1 == "environment:" { $0 = "environment:\n matrix:'"$appveyorEnv"'" } { printf "%s%s", $0, RS }' .appveyor.yml)" -echo "$appveyor" > .appveyor.yml