diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 022db925c..a6f131353 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -16,36 +16,7 @@ env: jobs: build-webui: - runs-on: ubuntu-latest - - steps: - - name: Check out code - uses: actions/checkout@v4 - with: - fetch-depth: 0 - - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version-file: webui/.nvmrc - cache: yarn - cache-dependency-path: webui/yarn.lock - - - name: Build webui - working-directory: ./webui - run: | - yarn install - yarn build - - - name: Package webui - run: | - tar czvf webui.tar.gz ./webui/static/ - - - name: Artifact webui - uses: actions/upload-artifact@v4 - with: - name: webui.tar.gz - path: webui.tar.gz + uses: ./.github/workflows/template-webui.yaml build: runs-on: ubuntu-latest @@ -97,7 +68,9 @@ jobs: name: webui.tar.gz - name: Untar webui - run: tar xvf webui.tar.gz + run: | + tar xvf webui.tar.gz + rm webui.tar.gz - name: Build env: diff --git a/.github/workflows/experimental.yaml b/.github/workflows/experimental.yaml index aadce96a8..b089beabc 100644 --- a/.github/workflows/experimental.yaml +++ b/.github/workflows/experimental.yaml @@ -12,34 +12,25 @@ env: jobs: + build-webui: + if: github.repository == 'traefik/traefik' + uses: ./.github/workflows/template-webui.yaml + experimental: if: github.repository == 'traefik/traefik' name: Build experimental image on branch runs-on: ubuntu-latest steps: - - # https://github.com/marketplace/actions/checkout - name: Check out code uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Setup node - uses: actions/setup-node@v4 - with: - node-version-file: webui/.nvmrc - cache: yarn - cache-dependency-path: webui/yarn.lock - - - name: Build webui - working-directory: ./webui - run: | - yarn install - yarn build - - name: Set up Go ${{ env.GO_VERSION }} uses: actions/setup-go@v5 + env: + ImageOS: ${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.goarm }} with: go-version: ${{ env.GO_VERSION }} @@ -61,6 +52,16 @@ jobs: - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 + - name: Artifact webui + uses: actions/download-artifact@v4 + with: + name: webui.tar.gz + + - name: Untar webui + run: | + tar xvf webui.tar.gz + rm webui.tar.gz + - name: Build docker experimental image env: DOCKER_BUILDX_ARGS: "--push" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 000000000..6ecda4432 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,127 @@ +name: Release + +on: + push: + tags: + - 'v*.*.*' + +env: + GO_VERSION: '1.23' + CGO_ENABLED: 0 + VERSION: ${{ github.ref_name }} + TRAEFIKER_EMAIL: "traefiker@traefik.io" + CODENAME: munster + +jobs: + + build-webui: + if: github.ref_type == 'tag' + uses: ./.github/workflows/template-webui.yaml + + build: + if: github.ref_type == 'tag' + runs-on: ubuntu-latest + + strategy: + matrix: + os: [ linux-amd64, linux-386, linux-arm, linux-arm64, linux-ppc64le, linux-s390x, linux-riscv64, darwin, windows-amd64, windows-arm64, windows-386, freebsd, openbsd ] + needs: + - build-webui + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Go ${{ env.GO_VERSION }} + uses: actions/setup-go@v5 + env: + # Ensure cache consistency on Linux, see https://github.com/actions/setup-go/pull/383 + ImageOS: ${{ matrix.os }} + with: + go-version: ${{ env.GO_VERSION }} + + - name: Artifact webui + uses: actions/download-artifact@v4 + with: + name: webui.tar.gz + + - name: Untar webui + run: | + tar xvf webui.tar.gz + rm webui.tar.gz + + - name: Go generate + run: go generate + + + - name: Generate goreleaser file + run: | + GORELEASER_CONFIG_FILE_PATH=$(go run ./internal/release "${{ matrix.os }}") + echo "GORELEASER_CONFIG_FILE_PATH=$GORELEASER_CONFIG_FILE_PATH" >> $GITHUB_ENV + + - name: Build with goreleaser + uses: goreleaser/goreleaser-action@v6 + with: + distribution: goreleaser + # 'latest', 'nightly', or a semver + version: '~> v2' + args: release --clean --timeout="90m" --config "${{ env.GORELEASER_CONFIG_FILE_PATH }}" + + - name: Artifact binaries + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.os }}-binaries + path: | + dist/**/*_checksums.txt + dist/**/*.tar.gz + dist/**/*.zip + retention-days: 1 + + release: + if: github.ref_type == 'tag' + runs-on: ubuntu-latest + + needs: + - build + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Retrieve the secret and decode it to a file + env: + TRAEFIKER_RSA: ${{ secrets.TRAEFIKER_RSA }} + run: | + mkdir -p ~/.ssh + echo "${TRAEFIKER_RSA}" | base64 --decode > ~/.ssh/traefiker_rsa + + - name: Download All Artifacts + uses: actions/download-artifact@v4 + with: + path: dist/ + pattern: "*-binaries" + merge-multiple: true + + - name: Publish Release + env: + GH_TOKEN: ${{ github.token }} + run: | + cat dist/**/*_checksums.txt >> "dist/traefik_${VERSION}_checksums.txt" + rm dist/**/*_checksums.txt + tar cfz "dist/traefik-${VERSION}.src.tar.gz" \ + --exclude-vcs \ + --exclude .idea \ + --exclude .travis \ + --exclude .semaphoreci \ + --exclude .github \ + --exclude dist . + + chown -R "$(id -u)":"$(id -g)" dist/ + gh release create ${VERSION} ./dist/**/traefik*.{zip,tar.gz} ./dist/traefik*.{tar.gz,txt} --repo traefik/traefik --title ${VERSION} --notes ${VERSION} + + ./script/deploy.sh + diff --git a/.github/workflows/template-webui.yaml b/.github/workflows/template-webui.yaml new file mode 100644 index 000000000..df52d75c1 --- /dev/null +++ b/.github/workflows/template-webui.yaml @@ -0,0 +1,37 @@ +name: Build Web UI +on: + workflow_call: {} +jobs: + + build-webui: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Setup node + uses: actions/setup-node@v4 + with: + node-version-file: webui/.nvmrc + cache: yarn + cache-dependency-path: webui/yarn.lock + + - name: Build webui + working-directory: ./webui + run: | + yarn install + yarn build + + - name: Package webui + run: | + tar czvf webui.tar.gz ./webui/static/ + + - name: Artifact webui + uses: actions/upload-artifact@v4 + with: + name: webui.tar.gz + path: webui.tar.gz + retention-days: 1 diff --git a/.goreleaser.yml.tmpl b/.goreleaser.yml.tmpl index 5deda441e..fbd27891b 100644 --- a/.goreleaser.yml.tmpl +++ b/.goreleaser.yml.tmpl @@ -1,12 +1,11 @@ project_name: traefik +version: 2 +[[if .GOARCH]] +dist: "./dist/[[ .GOOS ]]-[[ .GOARCH ]]" +[[else]] dist: "./dist/[[ .GOOS ]]" - -[[ if eq .GOOS "linux" ]] -before: - hooks: - - go generate -[[ end ]] +[[end]] builds: - binary: traefik @@ -21,6 +20,9 @@ builds: goos: - "[[ .GOOS ]]" goarch: + [[if .GOARCH]] + - "[[ .GOARCH ]]" + [[else]] - amd64 - '386' - arm @@ -28,6 +30,7 @@ builds: - ppc64le - s390x - riscv64 + [[end]] goarm: - '7' - '6' diff --git a/.semaphore/semaphore.yml b/.semaphore/semaphore.yml index f72f19b6a..32f22b2b8 100644 --- a/.semaphore/semaphore.yml +++ b/.semaphore/semaphore.yml @@ -1,63 +1,13 @@ version: v1.0 -name: Traefik +name: Traefik Release - deprecated agent: machine: - type: e1-standard-4 - os_image: ubuntu2004 - -fail_fast: - stop: - when: "branch != 'master'" - -auto_cancel: - queued: - when: "branch != 'master'" - running: - when: "branch != 'master'" - -global_job_config: - prologue: - commands: - - curl -sSfL https://raw.githubusercontent.com/ldez/semgo/master/godownloader.sh | sudo sh -s -- -b "/usr/local/bin" - - sudo semgo go1.23 - - export "GOPATH=$(go env GOPATH)" - - export "SEMAPHORE_GIT_DIR=${GOPATH}/src/github.com/traefik/${SEMAPHORE_PROJECT_NAME}" - - export "PATH=${GOPATH}/bin:${PATH}" - - mkdir -vp "${SEMAPHORE_GIT_DIR}" "${GOPATH}/bin" - - export GOPROXY=https://proxy.golang.org,direct - - curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "${GOPATH}/bin" v1.62.0 - - curl -sSfL https://gist.githubusercontent.com/traefiker/6d7ac019c11d011e4f131bb2cca8900e/raw/goreleaser.sh | bash -s -- -b "${GOPATH}/bin" - - checkout - - cache restore traefik-$(checksum go.sum) - + type: f1-standard-2 + os_image: ubuntu2204 blocks: - - name: Release - dependencies: [] - run: - when: "tag =~ '.*'" + - name: 'Do nothing' task: - agent: - machine: - type: e1-standard-8 - os_image: ubuntu2004 - secrets: - - name: traefik - env_vars: - - name: GH_VERSION - value: 2.32.1 - - name: CODENAME - value: "munster" - prologue: - commands: - - export VERSION=${SEMAPHORE_GIT_TAG_NAME} - - curl -sSL -o /tmp/gh_${GH_VERSION}_linux_amd64.tar.gz https://github.com/cli/cli/releases/download/v${GH_VERSION}/gh_${GH_VERSION}_linux_amd64.tar.gz - - tar -zxvf /tmp/gh_${GH_VERSION}_linux_amd64.tar.gz -C /tmp - - sudo mv /tmp/gh_${GH_VERSION}_linux_amd64/bin/gh /usr/local/bin/gh - - sudo rm -rf ~/.phpbrew ~/.kerl ~/.sbt ~/.nvm ~/.npm ~/.kiex /usr/lib/jvm /opt/az /opt/firefox /usr/lib/google-cloud-sdk ~/.rbenv ~/.pip_download_cache # Remove unnecessary data. - - sudo service docker stop && sudo umount /var/lib/docker && sudo service docker start # Unmounts the docker disk and the whole system disk is usable. jobs: - - name: Release + - name: 'Do nothing' commands: - - make release-packages - - gh release create ${SEMAPHORE_GIT_TAG_NAME} ./dist/**/traefik*.{zip,tar.gz} ./dist/traefik*.{tar.gz,txt} --repo traefik/traefik --title ${SEMAPHORE_GIT_TAG_NAME} --notes ${SEMAPHORE_GIT_TAG_NAME} - - ./script/deploy.sh + - echo "Do nothing" diff --git a/CHANGELOG.md b/CHANGELOG.md index fb05b47b8..ed6a8c81f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [v2.11.15](https://github.com/traefik/traefik/tree/v2.11.15) (2024-12-06) +[All Commits](https://github.com/traefik/traefik/compare/v2.11.14...v2.11.15) + +**Bug fixes:** +- **[acme]** Update go-acme/lego to v4.20.4 ([#11295](https://github.com/traefik/traefik/pull/11295) by [ldez](https://github.com/ldez)) +- **[http3]** Update github.com/quic-go/quic-go to v0.48.2 ([#11320](https://github.com/traefik/traefik/pull/11320) by [kevinpollet](https://github.com/kevinpollet)) + ## [v3.2.1](https://github.com/traefik/traefik/tree/v3.2.1) (2024-11-20) [All Commits](https://github.com/traefik/traefik/compare/v3.2.0...v3.2.1) diff --git a/go.mod b/go.mod index 485677d5f..44d29815d 100644 --- a/go.mod +++ b/go.mod @@ -18,7 +18,7 @@ require ( github.com/docker/go-connections v0.5.0 github.com/fatih/structs v1.1.0 github.com/fsnotify/fsnotify v1.7.0 - github.com/go-acme/lego/v4 v4.20.2 + github.com/go-acme/lego/v4 v4.20.4 github.com/go-kit/kit v0.13.0 github.com/go-kit/log v0.2.1 github.com/golang/protobuf v1.5.4 @@ -50,7 +50,7 @@ require ( github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // No tag on the repo. github.com/prometheus/client_golang v1.19.1 github.com/prometheus/client_model v0.6.1 - github.com/quic-go/quic-go v0.47.0 + github.com/quic-go/quic-go v0.48.2 github.com/rs/zerolog v1.29.0 github.com/sirupsen/logrus v1.9.3 github.com/spiffe/go-spiffe/v2 v2.1.1 diff --git a/go.sum b/go.sum index 7c72ed2d9..f8183ae41 100644 --- a/go.sum +++ b/go.sum @@ -365,8 +365,8 @@ github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwv github.com/gin-gonic/gin v1.7.4/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= -github.com/go-acme/lego/v4 v4.20.2 h1:ZwO3oLZb8fL6up1OZVJP3yHuvqhozzlEmyqKmhrPchQ= -github.com/go-acme/lego/v4 v4.20.2/go.mod h1:foauPlhnhoq8WUphaWx5U04uDc+JGhk4ZZtPz/Vqsjg= +github.com/go-acme/lego/v4 v4.20.4 h1:yCQGBX9jOfMbriEQUocdYm7EBapdTp8nLXYG8k6SqSU= +github.com/go-acme/lego/v4 v4.20.4/go.mod h1:foauPlhnhoq8WUphaWx5U04uDc+JGhk4ZZtPz/Vqsjg= github.com/go-chi/chi/v5 v5.0.0/go.mod h1:BBug9lr0cqtdAhsu6R4AAdvufI0/XBzAQSsUqJpoZOs= github.com/go-cmd/cmd v1.0.5/go.mod h1:y8q8qlK5wQibcw63djSl/ntiHUHXHGdCkPk0j4QeW4s= github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= @@ -1033,8 +1033,8 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/quic-go/qpack v0.5.1 h1:giqksBPnT/HDtZ6VhtFKgoLOWmlyo9Ei6u9PqzIMbhI= github.com/quic-go/qpack v0.5.1/go.mod h1:+PC4XFrEskIVkcLzpEkbLqq1uCoxPhQuvK5rH1ZgaEg= -github.com/quic-go/quic-go v0.47.0 h1:yXs3v7r2bm1wmPTYNLKAAJTHMYkPEsfYJmTazXrCZ7Y= -github.com/quic-go/quic-go v0.47.0/go.mod h1:3bCapYsJvXGZcipOHuu7plYtaV6tnF+z7wIFsU0WK9E= +github.com/quic-go/quic-go v0.48.2 h1:wsKXZPeGWpMpCGSWqOcqpW2wZYic/8T3aqiOID0/KWE= +github.com/quic-go/quic-go v0.48.2/go.mod h1:yBgs3rWBOADpga7F+jJsb6Ybg1LSYiQvwWlLX+/6HMs= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4= diff --git a/internal/release/release.go b/internal/release/release.go index d27eed270..d011982ac 100644 --- a/internal/release/release.go +++ b/internal/release/release.go @@ -25,14 +25,22 @@ func main() { ParseFiles("./.goreleaser.yml.tmpl"), ) - outputPath := path.Join(os.TempDir(), fmt.Sprintf(".goreleaser_%s.yml", goos)) + goarch := "" + outputFileName := fmt.Sprintf(".goreleaser_%s.yml", goos) + if strings.Contains(goos, "-") { + split := strings.Split(goos, "-") + goos = split[0] + goarch = split[1] + } + + outputPath := path.Join(os.TempDir(), outputFileName) output, err := os.Create(outputPath) if err != nil { log.Fatal(err) } - err = tmpl.Execute(output, map[string]string{"GOOS": goos}) + err = tmpl.Execute(output, map[string]string{"GOOS": goos, "GOARCH": goarch}) if err != nil { log.Fatal(err) } diff --git a/script/deploy.sh b/script/deploy.sh index 3c16b7446..0233235c2 100755 --- a/script/deploy.sh +++ b/script/deploy.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash set -e -if [ -n "${SEMAPHORE_GIT_TAG_NAME}" ]; then +if [ -n "${VERSION}" ]; then echo "Deploying..." else echo "Skipping deploy" @@ -13,8 +13,8 @@ git config --global user.name "Traefiker" # load ssh key eval "$(ssh-agent -s)" -chmod 600 /home/semaphore/.ssh/traefiker_rsa -ssh-add /home/semaphore/.ssh/traefiker_rsa +chmod 600 ~/.ssh/traefiker_rsa +ssh-add ~/.ssh/traefiker_rsa # update traefik-library-image repo (official Docker image) echo "Updating traefik-library-imag repo..."