diff --git a/.github/build/friendly-filenames.json b/.github/build/friendly-filenames.json new file mode 100644 index 0000000..d284f38 --- /dev/null +++ b/.github/build/friendly-filenames.json @@ -0,0 +1,33 @@ +{ + "android-arm64": { "friendlyName": "android-arm64-v8a" }, + "darwin-amd64": { "friendlyName": "darwin-amd64" }, + "darwin-arm64": { "friendlyName": "darwin-arm64" }, + "dragonfly-amd64": { "friendlyName": "dragonfly-amd64" }, + "freebsd-386": { "friendlyName": "freebsd-386" }, + "freebsd-amd64": { "friendlyName": "freebsd-amd64" }, + "freebsd-arm64": { "friendlyName": "freebsd-arm64-v8a" }, + "freebsd-arm7": { "friendlyName": "freebsd-arm32-v7a" }, + "linux-386": { "friendlyName": "linux-386" }, + "linux-amd64": { "friendlyName": "linux-amd64" }, + "linux-arm5": { "friendlyName": "linux-arm32-v5" }, + "linux-arm64": { "friendlyName": "linux-arm64-v8a" }, + "linux-arm6": { "friendlyName": "linux-arm32-v6" }, + "linux-arm7": { "friendlyName": "linux-armv7" }, + "linux-mips64le": { "friendlyName": "linux-mips64le" }, + "linux-mips64": { "friendlyName": "linux-mips64" }, + "linux-mipslesoftfloat": { "friendlyName": "linux-mips32le-softfloat" }, + "linux-mipsle": { "friendlyName": "linux-mips32le" }, + "linux-mipssoftfloat": { "friendlyName": "linux-mips32-softfloat" }, + "linux-mips": { "friendlyName": "linux-mips32" }, + "linux-ppc64le": { "friendlyName": "linux-ppc64le" }, + "linux-ppc64": { "friendlyName": "linux-ppc64" }, + "linux-riscv64": { "friendlyName": "linux-riscv64" }, + "linux-s390x": { "friendlyName": "linux-s390x" }, + "openbsd-386": { "friendlyName": "openbsd-386" }, + "openbsd-amd64": { "friendlyName": "openbsd-amd64" }, + "openbsd-arm64": { "friendlyName": "openbsd-arm64-v8a" }, + "openbsd-arm7": { "friendlyName": "openbsd-arm32-v7a" }, + "windows-386": { "friendlyName": "windows-386" }, + "windows-amd64": { "friendlyName": "windows-amd64" }, + "windows-arm7": { "friendlyName": "windows-arm32-v7a" } + } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f2f7ed8..6af7420 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,59 +1,179 @@ -name: release +name: Build and Release + on: + workflow_dispatch: + release: + types: [published] push: - tags: - - v* + branches: + - master + paths: + - "**/*.go" + - "go.mod" + - "go.sum" + - ".github/workflows/*.yml" jobs: build: - runs-on: ubuntu-latest strategy: matrix: - GOOS: [ darwin, linux, windows ] - GOARCH: [ amd64 ] + # Include amd64 on all platforms. + goos: [windows, freebsd, openbsd, linux, dragonfly, darwin] + goarch: [amd64, 386] + exclude: + # Exclude i386 on darwin and dragonfly. + - goarch: 386 + goos: dragonfly + - goarch: 386 + goos: darwin include: - - GOOS: darwin - GOARCH: amd64 - suffix: darwin-amd64 - - GOOS: windows - GOARCH: amd64 - suffix: windows-amd64.exe - - GOOS: linux - GOARCH: amd64 - suffix: linux-amd64 - - GOOS: linux - GOARCH: arm - suffix: linux-armv7 - steps: - - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 - with: - go-version: 1.16.x - - name: Build ${{ matrix.suffix }} (GOOS=${{ matrix.GOOS }}, GOARCH=${{ matrix.GOARCH }}) - env: - GOOS: ${{ matrix.GOOS }} - GOARCH: ${{ matrix.GOARCH }} - CGO_ENABLED: 0 - run: | - go version - go build -tags netgo -ldflags "-X github.com/dutchcoders/transfer.sh/cmd.Version=${GITHUB_REF##*/} -a -s -w -extldflags '-static'" -o ./artifacts/transfersh-${GITHUB_REF##*/}-${{ matrix.suffix }} - - uses: actions/upload-artifact@v2 - name: Upload artifacts - with: - name: artifacts - path: ./artifacts + # BEIGIN MacOS ARM64 + - goos: darwin + goarch: arm64 + # END MacOS ARM64 + # BEGIN Linux ARM 5 6 7 + - goos: linux + goarch: arm + goarm: 7 + - goos: linux + goarch: arm + goarm: 6 + - goos: linux + goarch: arm + goarm: 5 + # END Linux ARM 5 6 7 + # BEGIN Android ARM 8 + - goos: android + goarch: arm64 + # END Android ARM 8 + # Windows ARM 7 + - goos: windows + goarch: arm + goarm: 7 + # BEGIN Other architectures + # BEGIN riscv64 & ARM64 + - goos: linux + goarch: arm64 + - goos: linux + goarch: riscv64 + # END riscv64 & ARM64 + # BEGIN MIPS + - goos: linux + goarch: mips64 + - goos: linux + goarch: mips64le + - goos: linux + goarch: mipsle + - goos: linux + goarch: mips + # END MIPS + # BEGIN PPC + - goos: linux + goarch: ppc64 + - goos: linux + goarch: ppc64le + # END PPC + # BEGIN FreeBSD ARM + - goos: freebsd + goarch: arm64 + - goos: freebsd + goarch: arm + goarm: 7 + # END FreeBSD ARM + # BEGIN S390X + - goos: linux + goarch: s390x + # END S390X + # END Other architectures + # BEGIN OPENBSD ARM + - goos: openbsd + goarch: arm64 + - goos: openbsd + goarch: arm + goarm: 7 + # END OPENBSD ARM + fail-fast: false - release: runs-on: ubuntu-latest - needs: [ build ] + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + GOARM: ${{ matrix.goarm }} + CGO_ENABLED: 0 steps: - - uses: actions/download-artifact@v2 - name: Download artifacts + - name: Checkout codebase + uses: actions/checkout@v2 + + - name: Show workflow information + id: get_filename + run: | + export _NAME=$(jq ".[\"$GOOS-$GOARCH$GOARM$GOMIPS\"].friendlyName" -r < .github/build/friendly-filenames.json) + echo "GOOS: $GOOS, GOARCH: $GOARCH, GOARM: $GOARM, GOMIPS: $GOMIPS, RELEASE_NAME: $_NAME" + echo "::set-output name=ASSET_NAME::$_NAME" + echo "::set-output name=GIT_TAG::${GITHUB_REF##*/}" + echo "ASSET_NAME=$_NAME" >> $GITHUB_ENV + + - name: Set up Go + uses: actions/setup-go@v2 with: - name: artifacts - path: ./artifacts - - name: Publish artifacts + go-version: ^1.16 + + - name: Get project dependencies + run: go mod download + + - name: Build Transfersh + run: | + mkdir -p build_assets + go build -tags netgo -ldflags "-X github.com/dutchcoders/transfer.sh/cmd.Version=${GITHUB_REF##*/} -a -s -w -extldflags '-static'" -o build_assets/transfersh-${GITHUB_REF##*/}-${ASSET_NAME} + + - name: Build Mips softfloat Transfersh + if: matrix.goarch == 'mips' || matrix.goarch == 'mipsle' + run: | + GOMIPS=softfloat go build -tags netgo -ldflags "-X github.com/dutchcoders/transfer.sh/cmd.Version=${GITHUB_REF##*/} -a -s -w -extldflags '-static'" -o build_assets/transfersh-softfloat-${GITHUB_REF##*/}-${ASSET_NAME} + + - name: Rename Windows Transfersh + if: matrix.goos == 'windows' + run: | + cd ./build_assets || exit 1 + mv transfersh-${GITHUB_REF##*/}-${ASSET_NAME} transfersh-${GITHUB_REF##*/}-${ASSET_NAME}.exe + + - name: Prepare to release + run: | + cp ${GITHUB_WORKSPACE}/README.md ./build_assets/README.md + cp ${GITHUB_WORKSPACE}/LICENSE ./build_assets/LICENSE + + - name: Create Gzip archive + shell: bash + run: | + pushd build_assets || exit 1 + touch -mt $(date +%Y01010000) * + tar zcvf transfersh-${GITHUB_REF##*/}-${ASSET_NAME}.tar.gz * + mv transfersh-${GITHUB_REF##*/}-${ASSET_NAME}.tar.gz ../ + FILE=`find . -name "transfersh-${GITHUB_REF##*/}-${ASSET_NAME}*"` + DGST=$FILE.sha256sum + echo `sha256sum $FILE` > $DGST + popd || exit 1 + FILE=./transfersh-${GITHUB_REF##*/}-${ASSET_NAME}.tar.gz + DGST=$FILE.sha256sum + echo `sha256sum $FILE` > $DGST + + - name: Change the name + run: | + mv build_assets transfersh-${GITHUB_REF##*/}-${ASSET_NAME} + + - name: Upload files to Artifacts + uses: actions/upload-artifact@v2 + with: + name: transfersh-${{ steps.get_filename.outputs.GIT_TAG }}-${{ steps.get_filename.outputs.ASSET_NAME }} + path: | + ./transfersh-${{ steps.get_filename.outputs.GIT_TAG }}-${{ steps.get_filename.outputs.ASSET_NAME }}/* + + - name: Upload binaries to release uses: softprops/action-gh-release@v1 + if: github.event_name == 'release' with: - files: './artifacts/*' + files: | + ./transfersh-${{ steps.get_filename.outputs.GIT_TAG }}-${{ steps.get_filename.outputs.ASSET_NAME }}.tar.gz* + ./transfersh-${{ steps.get_filename.outputs.GIT_TAG }}-${{ steps.get_filename.outputs.ASSET_NAME }}/transfersh-${{ steps.get_filename.outputs.GIT_TAG }}-${{ steps.get_filename.outputs.ASSET_NAME }}* env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + diff --git a/.gitignore b/.gitignore index fc27d44..f48732d 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,5 @@ transfersh-server/run.sh .elasticbeanstalk/* !.elasticbeanstalk/*.cfg.yml !.elasticbeanstalk/*.global.yml + +!.github/build/