浏览代码

Added multiarch build and release workflow

Jguer 5 年之前
父节点
当前提交
d647d29435
共有 5 个文件被更改,包括 101 次插入17 次删除
  1. 1 1
      .github/workflows/docker-ci.yml
  2. 89 0
      .github/workflows/docker-multiarch-tag.yml
  3. 2 2
      Makefile
  4. 2 14
      testdata/travis.sh
  5. 7 0
      testdata/ci/version.sh

+ 1 - 1
.github/workflows/docker-ci.yml

@@ -11,7 +11,7 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v1#
       - name: Run Build and tests
-        run: ./testdata/travis.sh
+        run: ./testdata/ci/full.sh
       - uses: actions/upload-artifact@master
         with:
           name: yay_release

+ 89 - 0
.github/workflows/docker-multiarch-tag.yml

@@ -0,0 +1,89 @@
+name: Multiarch build and release
+on: [push] # To change to tag in merge
+
+jobs:
+  build-releases:
+    strategy:
+      matrix:
+        arch: ['x86_64', 'armv7h', 'aarch64']
+    name: Build ${{ matrix.arch }}
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@master
+      - name: Set version
+        id: set_version
+        run: ./testdata/ci/version.sh
+      - name: Install dependencies
+        run: sudo apt update -y && sudo apt install -y qemu qemu-user-static
+      - name: Setup qemu-user-static
+        run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
+      - name: Build ${{ matrix.arch }} release
+        run: |
+          mkdir artifacts
+          make docker-release ARCH=${{ matrix.arch }} VERSION=${{ steps.set_version.outputs.version }}
+          mv *.tar.gz artifacts
+      - uses: actions/upload-artifact@master
+        with:
+          name: yay_${{ matrix.arch }}
+          path: artifacts
+  create_release:
+    name: Create release from this build
+    needs: [build-releases]
+    runs-on: ubuntu-latest
+    steps:
+      - name: Checkout code
+        uses: actions/checkout@master
+      - name: Set version
+        id: set_version
+        run: ./testdata/ci/version.sh
+      - uses: actions/download-artifact@master
+        with:
+          name: yay_x86_64
+      - uses: actions/download-artifact@master
+        with:
+          name: yay_armv7h
+      - uses: actions/download-artifact@master
+        with:
+          name: yay_aarch64
+      - name: Create Release
+        id: create_release
+        uses: actions/create-release@master
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          tag_name: ${{ steps.set_version.outputs.version }}
+          release_name: ${{ steps.set_version.outputs.version }}
+          body: "## Changelog"
+          draft: true
+          prerelease: false
+      - name: Upload x86_64 asset
+        id: upload-release-asset-x86_64
+        uses: actions/upload-release-asset@master
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
+          asset_path: ./yay_x86_64/yay_${{ steps.set_version.outputs.version }}_x86_64.tar.gz
+          asset_name: yay_${{ steps.set_version.outputs.version }}_x86_64.tar.gz
+          asset_content_type: application/tar+gzip
+      - name: Upload armv7h asset
+        id: upload-release-asset-armv7h
+        uses: actions/upload-release-asset@master
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
+          asset_path: ./yay_armv7h/yay_${{ steps.set_version.outputs.version }}_armv7h.tar.gz
+          asset_name: yay_${{ steps.set_version.outputs.version }}_armv7h.tar.gz
+          asset_content_type: application/tar+gzip
+      - name: Upload aarch64 asset
+        id: upload-release-asset-aarch64
+        uses: actions/upload-release-asset@master
+        env:
+          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+        with:
+          upload_url: ${{ steps.create_release.outputs.upload_url }}
+          asset_path: ./yay_aarch64/yay_${{ steps.set_version.outputs.version }}_aarch64.tar.gz
+          asset_name: yay_${{ steps.set_version.outputs.version }}_aarch64.tar.gz
+          asset_content_type: application/tar+gzip

+ 2 - 2
Makefile

@@ -62,7 +62,7 @@ docker-release-all:
 .PHONY: docker-release
 docker-release:
 	docker build --target builder_env --build-arg BUILD_ARCH="$(ARCH)" -t yay-$(ARCH):${VERSION} .
-	docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release
+	docker run -e="ARCH=$(ARCH)" --name yay-$(ARCH) yay-$(ARCH):${VERSION} make release VERSION=${VERSION}
 	docker cp yay-$(ARCH):/app/${PACKAGE} $(PACKAGE)
 	docker container rm yay-$(ARCH)
 
@@ -83,7 +83,7 @@ test-vendor: vendor
 	fi;
 
 .PHONY: lint
-lint: 
+lint:
 	golangci-lint run
 	golint -set_exit_status . ./pkg/...
 

+ 2 - 14
testdata/travis.sh

@@ -12,22 +12,10 @@ docker build --build-arg BUILD_ARCH=${ARCH} --target builder_env -t yay-builder_
 docker build --build-arg BUILD_ARCH=${ARCH} --target builder -t yay-builder . || exit $?
 
 # Our unit test and packaging container
-docker run --name yay-go-tests yay-builder_env:latest make test
-rc=$?
-docker rm yay-go-tests
-
-if [[ $rc != 0 ]]; then
-  exit $rc
-fi
+docker run --rm --name yay-go-tests yay-builder_env:latest make test
 
 # Lint project
-docker run --name yay-go-lint yay-builder_env:latest make lint
-rc=$?
-docker rm yay-go-lint
-
-if [[ $rc != 0 ]]; then
-  exit $rc
-fi
+docker run --rm --name yay-go-lint yay-builder_env:latest make lint
 
 # Build image for integration testing
 # docker build -t yay . || exit $?

+ 7 - 0
testdata/ci/version.sh

@@ -0,0 +1,7 @@
+#!/bin/bash
+
+if git describe --tags --exact-match ; then
+echo "::set-output name=VERSION::$(git describe --tags --exact-match | sed 's/^v//g')"
+else 
+echo "::set-output name=VERSION::$(git describe --long --tags | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g')"
+fi