From a5a8200eb8e784afd6c0b7e6f544b60f4b1eff31 Mon Sep 17 00:00:00 2001 From: Matthew Penner Date: Sun, 6 Nov 2022 13:55:49 -0700 Subject: [PATCH] ci: cleanup --- .github/FUNDING.yaml | 1 + .github/FUNDING.yml | 1 - .../{codeql-analysis.yml => codeql.yaml} | 26 +++- .github/workflows/{docker.yml => docker.yaml} | 46 ++++--- .../workflows/{build-test.yml => push.yaml} | 83 ++++++++---- .github/workflows/release.yml | 45 ++++--- rpm/ptero-wings.spec | 124 ------------------ 7 files changed, 134 insertions(+), 192 deletions(-) create mode 100644 .github/FUNDING.yaml delete mode 100644 .github/FUNDING.yml rename .github/workflows/{codeql-analysis.yml => codeql.yaml} (52%) rename .github/workflows/{docker.yml => docker.yaml} (78%) rename .github/workflows/{build-test.yml => push.yaml} (51%) delete mode 100644 rpm/ptero-wings.spec diff --git a/.github/FUNDING.yaml b/.github/FUNDING.yaml new file mode 100644 index 0000000..a21d391 --- /dev/null +++ b/.github/FUNDING.yaml @@ -0,0 +1 @@ +github: [matthewpi] diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index e8af9b4..0000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [ matthewpi ] diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql.yaml similarity index 52% rename from .github/workflows/codeql-analysis.yml rename to .github/workflows/codeql.yaml index 1cc786d..4029e8e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql.yaml @@ -1,4 +1,5 @@ name: CodeQL + on: push: branches: @@ -7,24 +8,35 @@ on: branches: - develop schedule: - - cron: '0 9 * * 4' + - cron: "0 9 * * 4" + jobs: analyze: name: Analyze - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 + permissions: actions: read contents: read security-events: write + strategy: fail-fast: false matrix: - language: [ 'go' ] + language: + - go + steps: - - uses: actions/checkout@v2 + - name: Code Checkout + uses: actions/checkout@v3 + - name: Initialize CodeQL - uses: github/codeql-action/init@v1 + uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} - - uses: github/codeql-action/autobuild@v1 - - uses: github/codeql-action/analyze@v1 + + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yaml similarity index 78% rename from .github/workflows/docker.yml rename to .github/workflows/docker.yaml index 38b25cd..b215e70 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yaml @@ -1,58 +1,72 @@ -name: Publish Docker Image +name: Docker + on: push: branches: - develop tags: - - 'v*' + - "v*" + jobs: - push: - name: Push + build-and-push: + name: Build and Push runs-on: ubuntu-20.04 # Always run against a tag, even if the commit into the tag has [docker skip] within the commit message. if: "!contains(github.ref, 'develop') || (!contains(github.event.head_commit.message, 'skip docker') && !contains(github.event.head_commit.message, 'docker skip'))" + steps: - name: Code Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 + - name: Docker Meta id: docker_meta uses: crazy-max/ghaction-docker-meta@v1 with: images: ghcr.io/pterodactyl/wings + - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + uses: docker/setup-qemu-action@v2 + - name: Install buildx - uses: docker/setup-buildx-action@v1 - with: - version: v0.5.1 + uses: docker/setup-buildx-action@v2 + - name: Login to GitHub Container Registry - uses: docker/login-action@v1 + uses: docker/login-action@v2 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.REGISTRY_TOKEN }} + - name: Get Build Information id: build_info run: | echo "::set-output name=version_tag::${GITHUB_REF/refs\/tags\/v/}" echo "::set-output name=short_sha::$(git rev-parse --short HEAD)" - - name: Release Production Build + + - name: Build and push (latest) uses: docker/build-push-action@v2 if: "!contains(github.ref, 'develop')" with: + context: . + file: ./Dockerfile + push: true + platforms: linux/amd64,linux/arm64 build-args: | VERSION=${{ steps.build_info.outputs.version_tag }} labels: ${{ steps.docker_meta.outputs.labels }} - platforms: linux/amd64,linux/arm64 - push: true tags: ${{ steps.docker_meta.outputs.tags }} - - name: Release Development Build + + - name: Build and push (develop) uses: docker/build-push-action@v2 if: "contains(github.ref, 'develop')" with: + context: . + file: ./Dockerfile + push: ${{ github.event_name != 'pull_request' }} + platforms: linux/amd64,linux/arm64 build-args: | VERSION=dev-${{ steps.build_info.outputs.short_sha }} labels: ${{ steps.docker_meta.outputs.labels }} - platforms: linux/amd64,linux/arm64 - push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.docker_meta.outputs.tags }} + cache-from: type=gha + cache-to: type=gha,mode=max diff --git a/.github/workflows/build-test.yml b/.github/workflows/push.yaml similarity index 51% rename from .github/workflows/build-test.yml rename to .github/workflows/push.yaml index d6cc0e5..32cf78f 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/push.yaml @@ -1,4 +1,5 @@ -name: Run Tests +name: Push + on: push: branches: @@ -6,24 +7,29 @@ on: pull_request: branches: - develop + jobs: - build: + build-and-test: + name: Build and Test + runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: - os: [ ubuntu-20.04 ] - go: [ '1.18.7' ] - goos: [ linux ] - goarch: [ amd64, arm64 ] - runs-on: ${{ matrix.os }} + os: [ubuntu-20.04] + go: ["1.18.8", "1.19.3"] + goos: [linux] + goarch: [amd64, arm64] + steps: - - name: Code Checkout - uses: actions/checkout@v2 - - name: Setup Go v${{ matrix.go }} - uses: actions/setup-go@v2 + - name: Setup Go + uses: actions/setup-go@v3 with: go-version: ${{ matrix.go }} - - name: Print Environment + + - name: Code Checkout + uses: actions/checkout@v3 + + - name: Gather environment variables id: env run: | printf "Go Executable Path: $(which go)\n" @@ -33,22 +39,27 @@ jobs: printf "\n\nSystem Environment:\n\n" env printf "Git Version: $(git version)\n\n" - echo "::set-output name=version_tag::${GITHUB_REF/refs\/tags\//}" - echo "::set-output name=short_sha::$(git rev-parse --short HEAD)" - echo "::set-output name=go_cache::$(go env GOCACHE)" - echo "::set-output name=go_mod_cache::$(go env GOMODCACHE)" + echo "version_tag=${GITHUB_REF/refs\/tags\//}" >> $GITHUB_OUTPUT + echo "short_sha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + echo "go_cache=$(go env GOCACHE)" >> $GITHUB_OUTPUT + echo "go_mod_cache=$(go env GOMODCACHE)" >> $GITHUB_OUTPUT + - name: Build Cache - uses: actions/cache@v2 + uses: actions/cache@v3 with: - key: ${{ runner.os }}-go${{ matrix.go }}-${{ hashFiles('**/go.sum') }} + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | - ${{ runner.os }}-go${{ matrix.go }}- + ${{ runner.os }}-go- path: | ${{ steps.env.outputs.go_cache }} ${{ steps.env.outputs.go_mod_cache }} - - name: Get Dependencies + + - name: go mod download + env: + CGO_ENABLED: 0 run: | - go get -v -t -d ./... + go mod download + - name: Build env: GOOS: ${{ matrix.goos }} @@ -56,20 +67,36 @@ jobs: CGO_ENABLED: 0 SRC_PATH: github.com/pterodactyl/wings run: | - go build -v -trimpath -ldflags="-s -w -X ${SRC_PATH}/system.Version=dev-${GIT_COMMIT:0:7}" -o build/wings_${GOOS}_${GOARCH} wings.go - go build -v -trimpath -ldflags="-X ${SRC_PATH}/system.Version=dev-${GIT_COMMIT:0:7}" -o build/wings_${GOOS}_${GOARCH}_debug wings.go - chmod +x build/* - - name: Tests - run: go test -race ./... + go build -v -trimpath -ldflags="-s -w -X ${SRC_PATH}/system.Version=dev-${GIT_COMMIT:0:7}" -o dist/wings ${SRC_PATH} + go build -v -trimpath -ldflags="-X ${SRC_PATH}/system.Version=dev-${GIT_COMMIT:0:7}" -o dist/wings_debug ${SRC_PATH} + chmod 755 dist/* + + - name: go test + env: + GOOS: ${{ matrix.goos }} + GOARCH: ${{ matrix.goarch }} + CGO_ENABLED: 0 + run: | + go test $(go list ./...) + + - name: go test -race + # We can only run the race detector on the OS and Arch the CI runner is running on. + if: ${{ matrix.goarch == 'amd64' }} + env: + CGO_ENABLED: 1 + run: | + go test -race $(go list ./...) + - name: Upload Release Artifact uses: actions/upload-artifact@v2 if: ${{ github.ref == 'refs/heads/develop' || github.event_name == 'pull_request' }} with: name: wings_linux_${{ matrix.goarch }} - path: build/wings_linux_${{ matrix.goarch }} + path: dist/wings + - name: Upload Debug Artifact uses: actions/upload-artifact@v2 if: ${{ github.ref == 'refs/heads/develop' || github.event_name == 'pull_request' }} with: name: wings_linux_${{ matrix.goarch }}_debug - path: build/wings_linux_${{ matrix.goarch }}_debug + path: dist/wings_debug diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 91d2798..b76a8f6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,41 +1,50 @@ -name: Create Release +name: Release + on: push: tags: - - 'v*' + - "v*" + jobs: release: + name: Release runs-on: ubuntu-20.04 + steps: - name: Code Checkout - uses: actions/checkout@v2 - - uses: actions/setup-go@v2 + uses: actions/checkout@v3 + + - name: Setup Go + uses: actions/setup-go@v3 with: - go-version: '1.18.7' - - name: Build + go-version: "1.18.8" + + - name: Build release binaries env: + CGO_ENABLED: 0 REF: ${{ github.ref }} run: | - CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=${REF:11}" -o build/wings_linux_amd64 -v wings.go - CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=${REF:11}" -o build/wings_linux_arm64 -v wings.go - - name: Test - run: go test ./... + GOARCH=amd64 go build -o dist/wings_linux_amd64 -v -trimpath -ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=${REF:11}" github.com/pterodactyl/wings + GOARCH=arm64 go build -o dist/wings_linux_ard64 -v -trimpath -ldflags="-s -w -X github.com/pterodactyl/wings/system.Version=${REF:11}" github.com/pterodactyl/wings + - name: Compress binary and make it executable run: | - chmod +x build/wings_linux_amd64 - chmod +x build/wings_linux_arm64 + chmod 755 dist/wings_linux_amd64 dist/wings_linux_arm64 + - name: Extract changelog env: REF: ${{ github.ref }} run: | sed -n "/^## ${REF:10}/,/^## /{/^## /b;p}" CHANGELOG.md > ./RELEASE_CHANGELOG - echo ::set-output name=version_name::`sed -nr "s/^## (${REF:10} .*)$/\1/p" CHANGELOG.md` + echo "version_name=`sed -nr "s/^## (${REF:10} .*)$/\1/p" CHANGELOG.md`" > $GITHUB_OUTPUT + - name: Create checksum and add to changelog run: | SUM=`cd build && sha256sum wings_linux_amd64` SUM2=`cd build && sha256sum wings_linux_arm64` echo -e "\n#### SHA256 Checksum\n\`\`\`\n$SUM\n$SUM2\n\`\`\`\n" >> ./RELEASE_CHANGELOG echo -e "$SUM\n$SUM2" > checksums.txt + - name: Create release branch env: REF: ${{ github.ref }} @@ -49,7 +58,8 @@ jobs: git add system/const.go git commit -m "bump version for release" git push - - name: Create Release + + - name: Create release id: create_release uses: actions/create-release@v1 env: @@ -60,7 +70,8 @@ jobs: body_path: ./RELEASE_CHANGELOG draft: true prerelease: ${{ contains(github.ref, 'beta') || contains(github.ref, 'alpha') }} - - name: Upload amd64 Binary + + - name: Upload amd64 binary uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -69,7 +80,8 @@ jobs: asset_path: build/wings_linux_amd64 asset_name: wings_linux_amd64 asset_content_type: application/octet-stream - - name: Upload arm64 Binary + + - name: Upload arm64 binary uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -78,6 +90,7 @@ jobs: asset_path: build/wings_linux_arm64 asset_name: wings_linux_arm64 asset_content_type: application/octet-stream + - name: Upload checksum uses: actions/upload-release-asset@v1 env: diff --git a/rpm/ptero-wings.spec b/rpm/ptero-wings.spec deleted file mode 100644 index 1bd595d..0000000 --- a/rpm/ptero-wings.spec +++ /dev/null @@ -1,124 +0,0 @@ -Name: ptero-wings -Version: 1.7.0 -Release: 1%{?dist} -Summary: The server control plane for Pterodactyl Panel. Written from the ground-up with security, speed, and stability in mind. -BuildArch: x86_64 -License: MIT -URL: https://github.com/pterodactyl/wings -Source0: https://github.com/pterodactyl/wings/releases/download/v%{version}/wings_linux_amd64 - -%if 0%{?rhel} && 0%{?rhel} <= 8 -BuildRequires: systemd -%else -BuildRequires: systemd-rpm-macros -%endif - - -%description -Wings is Pterodactyl's server control plane, built for the rapidly -changing gaming industry and designed to be highly performant and -secure. Wings provides an HTTP API allowing you to interface directly -with running server instances, fetch server logs, generate backups, -and control all aspects of the server lifecycle. - -In addition, Wings ships with a built-in SFTP server allowing your -system to remain free of Pterodactyl specific dependencies, and -allowing users to authenticate with the same credentials they would -normally use to access the Panel. - -%prep - -%build -#nothing required - -%install -mkdir -p %{buildroot}%{_bindir} -mkdir -p %{buildroot}%{_unitdir} -cp %{_sourcedir}/wings_linux_amd64 %{buildroot}%{_bindir}/wings - -cat > %{buildroot}%{_unitdir}/wings.service << EOF -[Unit] -Description=Pterodactyl Wings Daemon -After=docker.service -Requires=docker.service -PartOf=docker.service -StartLimitIntervalSec=600 - -[Service] -WorkingDirectory=/etc/pterodactyl -ExecStart=/usr/bin/wings -ExecReload=/bin/kill -HUP $MAINPID -Restart=on-failure -StartLimitInterval=180 -StartLimitBurst=30 -RestartSec=5s - -[Install] -WantedBy=multi-user.target -EOF - -%files -%attr(0755, root, root) %{_prefix}/bin/wings -%attr(0644, root, root) %{_unitdir}/wings.service - -%post - -# Reload systemd -systemctl daemon-reload - -# Create the required directory structure -mkdir -p /etc/pterodactyl -mkdir -p /var/lib/pterodactyl/{archives,backups,volumes} -mkdir -p /var/log/pterodactyl/install - -%preun - -systemctl is-active %{name} >/dev/null 2>&1 -if [ $? -eq 0 ]; then - systemctl stop %{name} -fi - -systemctl is-enabled %{name} >/dev/null 2>&1 -if [ $? -eq 0 ]; then - systemctl disable %{name} -fi - -%postun -rm -rf /var/log/pterodactyl - -%verifyscript - -wings --version - -%changelog -* Wed Sep 14 2022 Chance Callahan - 1.7.0-1 -- Updating specfile to match stable release. - -* Wed Oct 27 2021 Capitol Hosting Solutions Systems Engineering - 1.5.3-1 -- specfile by Capitol Hosting Solutions, Upstream by Pterodactyl -- Rebased for https://github.com/pterodactyl/wings/releases/tag/v1.5.3 -- Fixes improper event registration and error handling during socket authentication that would cause the incorrect error message to be returned to the client, or no error in some scenarios. Event registration is now delayed until the socket is fully authenticated to ensure needless listeners are not registed. -- Fixes dollar signs always being evaluated as environment variables with no way to escape them. They can now be escaped as $$ which will transform into a single dollar sign. -- A websocket connection to a server will be closed by Wings if there is a send error encountered and the client will be left to handle reconnections, rather than simply logging the error and continuing to listen for new events. - -* Sun Sep 12 2021 Capitol Hosting Solutions Systems Engineering - 1.5.0-1 -- specfile by Capitol Hosting Solutions, Upstream by Pterodactyl -- Rebased for https://github.com/pterodactyl/wings/releases/tag/v1.5.0 -- Fixes a race condition when setting the application name in the console output for a server. -- Fixes a server being reinstalled causing the file_denylist parameter for an Egg to be ignored until Wings is restarted. -- Fixes YAML file parser not correctly setting boolean values. -- Fixes potential issue where the underlying websocket connection is closed but the parent request context is not yet canceled causing a write over a closed connection. -- Fixes race condition when closing all active websocket connections when a server is deleted. -- Fixes logic to determine if a server's context is closed out and send a websocket close message to connected clients. Previously this fired off whenever the request itself was closed, and not when the server context was closed. -- Exposes 8080 in the wings Dockerfile to better support reverse proxy tools. -- Releases are now built using Go 1.17 — the minimum version required to build Wings remains Go 1.16. -- Simplifed the logic powering server updates to only pull information from the Panel rather than trying to accept updated values. All parts of Wings needing the most up-to-date server details should call Server#Sync() to fetch the latest stored build information. -- Installer#New() no longer requires passing all of the server data as a byte slice, rather a new Installer#ServerDetails struct is exposed which can be passed and accepts a UUID and if the server should be started after the installer finishes. -- Removes complicated (and unused) logic during the server installation process that was a hold-over from legacy Wings architectures. -- Removes the PATCH /api/servers/:server endpoint — if you were previously using this API call it should be replaced with POST /api/servers/:server/sync. - -* Wed Aug 25 2021 Capitol Hosting Solutions Systems Engineering - 1.4.7-1 -- specfile by Capitol Hosting Solutions, Upstream by Pterodactyl -- Rebased for https://github.com/pterodactyl/wings/releases/tag/v1.4.7 -- SFTP access is now properly denied if a server is suspended. -- Correctly uses start_on_completion and crash_detection_enabled for servers.