diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..7f36c22204 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,8 @@ +.envrc +/.bundle +/coverage +/node_modules +/.idea +spec/examples.txt +package.json +yarn.lock diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000000..2de79620b9 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*.rb] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.env.default b/.env.default new file mode 100644 index 0000000000..c88abab0fe --- /dev/null +++ b/.env.default @@ -0,0 +1,24 @@ +ERRBIT_HOST=errbit.example.com +CONFIRM_RESOLVE_ERR=true +ERRBIT_CONFIRM_ERR_ACTIONS=true +ERRBIT_USER_HAS_USERNAME=false +ERRBIT_USE_GRAVATAR=true +ERRBIT_GRAVATAR_DEFAULT=identicon +ERRBIT_DISABLE_FORCE_SSL=false +ALLOW_COMMENTS_WITH_ISSUE_TRACKER=true +SECRET_KEY_BASE=f258ed69266dc8ad0ca79363c3d2f945c388a9c5920fc9a1ae99a98fbb619f135001c6434849b625884a9405a60cd3d50fc3e3b07ecd38cbed7406a4fccdb59c +ERRBIT_EMAIL_FROM='errbit@example.com' +ERRBIT_EMAIL_AT_NOTICES='[1,10,100]' +ERRBIT_PER_APP_EMAIL_AT_NOTICES=false +ERRBIT_NOTIFY_AT_NOTICES='[0]' +ERRBIT_PER_APP_NOTIFY_AT_NOTICES=false +MONGO_URL='mongodb://localhost' +ERRBIT_LOG_LOCATION=STDOUT +GITHUB_URL=https://github.com +GITHUB_AUTHENTICATION=true +GITHUB_API_URL=https://api.github.com +GITHUB_ACCESS_SCOPE='[repo]' +GITHUB_SITE_TITLE=GitHub +DEVISE_MODULES='[database_authenticatable,recoverable,rememberable,trackable,validatable,omniauthable]' +GOOGLE_AUTHENTICATION=true +GOOGLE_SITE_TITLE=Google diff --git a/.envrc b/.envrc new file mode 100644 index 0000000000..1854e34efd --- /dev/null +++ b/.envrc @@ -0,0 +1,4 @@ +PATH_add bin + +export SE_AVOID_STATS="true" +export CI="true" diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000000..a2e814f675 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @biow0lf diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..b1d5f38e36 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,54 @@ +version: 2 +updates: + - package-ecosystem: "bundler" + directory: "/" + schedule: + interval: "daily" + cooldown: + default-days: 7 + open-pull-requests-limit: 99 + allow: + - dependency-type: "direct" + - dependency-type: "indirect" + assignees: + - "biow0lf" + + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + cooldown: + default-days: 7 + open-pull-requests-limit: 99 + assignees: + - "biow0lf" + + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + cooldown: + default-days: 7 + open-pull-requests-limit: 99 + assignees: + - "biow0lf" + + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "daily" + cooldown: + default-days: 7 + open-pull-requests-limit: 99 + assignees: + - "biow0lf" + + - package-ecosystem: "docker-compose" + directory: "/" + schedule: + interval: "daily" + cooldown: + default-days: 7 + open-pull-requests-limit: 99 + assignees: + - "biow0lf" diff --git a/.github/workflows/actionlint.yml b/.github/workflows/actionlint.yml new file mode 100644 index 0000000000..79abab4a1e --- /dev/null +++ b/.github/workflows/actionlint.yml @@ -0,0 +1,61 @@ +name: Action Lint + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + actionlint: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + github.com:443 + registry.npmjs.org:443 + release-assets.githubusercontent.com:443 + raw.githubusercontent.com:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - uses: raven-actions/actionlint@3d39aea434753780c3b3d4a1a31c854b4dbf49d7 # v2.2.0 + id: actionlint + with: + pyflakes: false + + - name: actionlint Summary + if: ${{ steps.actionlint.outputs.exit-code != 0 }} + run: | + echo "Used actionlint version ${{ steps.actionlint.outputs.version-semver }}" + echo "Used actionlint release ${{ steps.actionlint.outputs.version-tag }}" + echo "actionlint ended with ${{ steps.actionlint.outputs.exit-code }} exit code" + echo "actionlint ended because '${{ steps.actionlint.outputs.exit-message }}'" + echo "actionlint found ${{ steps.actionlint.outputs.total-errors }} errors" + echo "actionlint checked ${{ steps.actionlint.outputs.total-files }} files" + echo "actionlint cache used: ${{ steps.actionlint.outputs.cache-hit }}" + # shellcheck disable=SC2242 + exit ${{ steps.actionlint.outputs.exit-code }} diff --git a/.github/workflows/brakeman.yml b/.github/workflows/brakeman.yml new file mode 100644 index 0000000000..96c8537a68 --- /dev/null +++ b/.github/workflows/brakeman.yml @@ -0,0 +1,54 @@ +name: Brakeman + +on: + push: + branches: + - main + - 0-10-stable + - 0-11-stable + pull_request: + branches: + - main + - 0-10-stable + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + brakeman: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + github.com:443 + hosted-compute-watchdog-prod-iad-02.githubapp.com:443 + index.rubygems.org:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - run: bin/brakeman --format github --quiet --run-all-checks || true diff --git a/.github/workflows/bundler-audit.yml b/.github/workflows/bundler-audit.yml new file mode 100644 index 0000000000..365b5e3cff --- /dev/null +++ b/.github/workflows/bundler-audit.yml @@ -0,0 +1,59 @@ +name: Bundler audit + +on: + push: + branches: + - main + - 0-10-stable + - 0-11-stable + pull_request: + branches: + - main + - 0-10-stable + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + bundler-audit: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + github.com:443 + hosted-compute-watchdog-prod-eus-01.githubapp.com:443 + hosted-compute-watchdog-prod-eus-02.githubapp.com:443 + hosted-compute-watchdog-prod-iad-01.githubapp.com:443 + hosted-compute-watchdog-prod-iad-02.githubapp.com:443 + index.rubygems.org:443 + objects.githubusercontent.com:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - run: bin/bundle-audit update + - run: bin/bundle-audit diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000000..91e1d9bdf2 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,42 @@ +# Dependency Review Action +# +# This Action will scan dependency manifest files that change as part of a Pull Request, +# surfacing known-vulnerable versions of the packages declared or updated in the PR. +# Once installed, if the workflow run is marked as required, +# PRs introducing known-vulnerable packages will be blocked from merging. +# +# Source repository: https://github.com/actions/dependency-review-action +name: "Dependency Review" +on: [pull_request] + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + dependency-review: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + api.deps.dev:443 + api.github.com:443 + api.securityscorecards.dev:443 + github.com:443 + + - name: "Checkout Repository" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Dependency Review" + uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0 diff --git a/.github/workflows/herb.yml b/.github/workflows/herb.yml new file mode 100644 index 0000000000..fd55f022a5 --- /dev/null +++ b/.github/workflows/herb.yml @@ -0,0 +1,52 @@ +name: Herb + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + herb: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + github.com:443 + index.rubygems.org:443 + objects.githubusercontent.com:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - run: bin/herb analyze diff --git a/.github/workflows/prettier.yml b/.github/workflows/prettier.yml new file mode 100644 index 0000000000..ce22c5f9ec --- /dev/null +++ b/.github/workflows/prettier.yml @@ -0,0 +1,58 @@ +name: Prettier + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + prettier: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + github.com:443 + hosted-compute-watchdog-prod-iad-01.githubapp.com:443 + hosted-compute-watchdog-prod-iad-02.githubapp.com:443 + nodejs.org:443 + objects.githubusercontent.com:443 + registry.yarnpkg.com:443 + release-assets.githubusercontent.com:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Install Node.js + uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0 + with: + node-version: "24" + check-latest: true + + - name: yarn install + run: yarn install --frozen-lockfile + + - name: run prettier + run: yarn prettier --check "*.{yml,yaml}" ".github/*.{yml,yaml}" ".github/**/*.{yml,yaml}" "config/**/*.{yml,yaml}" diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml new file mode 100644 index 0000000000..92f28588ca --- /dev/null +++ b/.github/workflows/publish.yml @@ -0,0 +1,93 @@ +name: build-and-publish + +on: + push: + branches: + - main + tags: + - "*" + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + build-and-publish: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.github.com:443 + auth.docker.io:443 + check.trivy.dev:443 + deb.debian.org:80 + dl-cdn.alpinelinux.org:443 + docker-images-prod.6aa30f8b08e16409b46e0173d6de2f56.r2.cloudflarestorage.com:443 + github.com:443 + hosted-compute-watchdog-prod-eus-02.githubapp.com:443 + hosted-compute-watchdog-prod-iad-01.githubapp.com:443 + hosted-compute-watchdog-prod-iad-02.githubapp.com:443 + index.docker.io:443 + index.rubygems.org:443 + mirror.gcr.io:443 + production.cloudflare.docker.com:443 + registry-1.docker.io:443 + registry.docker.com:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + production.cloudfront.docker.com:443 + + - name: Checkout + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Login to DockerHub + uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + - name: Docker meta + id: meta + uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0 + with: + images: ${{ github.event.repository.owner.name }}/${{ github.event.repository.name }} + tags: | + type=raw,value=latest + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + + - name: Build and push + uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0 + with: + context: . + pull: true + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25 # v0.36.0 + continue-on-error: true + with: + image-ref: "docker.io/errbit/errbit:latest" + format: "table" + exit-code: "1" + ignore-unfixed: true + vuln-type: "os,library" + severity: "MEDIUM,HIGH,CRITICAL" + scanners: "vuln" diff --git a/.github/workflows/rspec.yml b/.github/workflows/rspec.yml new file mode 100644 index 0000000000..2b08e4e7f0 --- /dev/null +++ b/.github/workflows/rspec.yml @@ -0,0 +1,66 @@ +name: RSpec + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +env: + CI: "true" + SE_AVOID_STATS: "true" + +jobs: + rspec: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + ruby: ["4.0.7"] + mongodb-version: ["7.0", "8.0", "8.2", "8.3", "9.0"] + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo: true + egress-policy: audit + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + ruby-version: ${{ matrix.ruby }} + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - name: Start MongoDB + uses: supercharge/mongodb-github-action@315db7fe45ac2880b7758f1933e6e5d59afd5e94 # 1.12.1 + with: + mongodb-version: ${{ matrix.mongodb-version }} + + - run: bundle exec bootsnap precompile --gemfile + - run: bundle exec bootsnap precompile app/ lib/ config/ Rakefile + - run: bundle exec rails zeitwerk:check + - run: bundle exec rails assets:precompile + - run: bundle exec rails errbit:bootstrap + - run: bundle exec rspec diff --git a/.github/workflows/rubocop.yml b/.github/workflows/rubocop.yml new file mode 100644 index 0000000000..c6bf2638dd --- /dev/null +++ b/.github/workflows/rubocop.yml @@ -0,0 +1,62 @@ +name: Rubocop + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + rubocop: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + github.com:443 + index.rubygems.org:443 + objects.githubusercontent.com:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - run: | + bin/rubocop \ + app/controllers/users_controller.rb \ + app/controllers/unlink_githubs_controller.rb \ + app/controllers/unlink_googles_controller.rb \ + app/interactors/user_destroy.rb \ + spec/factories/app_factory.rb \ + spec/factories/user_factory.rb \ + spec/requests/users_controller_spec.rb \ + spec/requests/unlink_githubs_controller_spec.rb \ + spec/requests/unlink_googles_controller_spec.rb diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml new file mode 100644 index 0000000000..8b27d48930 --- /dev/null +++ b/.github/workflows/scorecards.yml @@ -0,0 +1,102 @@ +# This workflow uses actions that are not certified by GitHub. They are provided +# by a third-party and are governed by separate terms of service, privacy +# policy, and support documentation. + +name: Scorecard supply-chain security +on: + # For Branch-Protection check. Only the default branch is supported. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection + branch_protection_rule: + # To guarantee Maintained check is occasionally updated. See + # https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained + schedule: + - cron: "20 7 * * 2" + push: + branches: ["main"] + +# Declare default permissions as read only. +permissions: read-all + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-24.04 + permissions: + # Needed to upload the results to code-scanning dashboard. + security-events: write + # Needed to publish results and get a badge (see publish_results below). + id-token: write + contents: read + actions: read + # To allow GraphQL ListCommits to work + issues: read + pull-requests: read + # To detect SAST tools + checks: read + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo: true + egress-policy: block + allowed-endpoints: > + api.deps.dev:443 + api.github.com:443 + api.osv.dev:443 + api.scorecard.dev:443 + auth.docker.io:443 + fulcio.sigstore.dev:443 + github.com:443 + hosted-compute-watchdog-prod-eus-01.githubapp.com:443 + hosted-compute-watchdog-prod-iad-02.githubapp.com:443 + index.docker.io:443 + oauth2.sigstore.dev:443 + oss-fuzz-build-logs.storage.googleapis.com:443 + rekor.sigstore.dev:443 + tuf-repo-cdn.sigstore.dev:443 + www.bestpractices.dev:443 + + - name: "Checkout code" + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@2d1146689b8cda280b9bc96326124645441f03bc # v2.4.4 + with: + results_file: results.sarif + results_format: sarif + # (Optional) "write" PAT token. Uncomment the `repo_token` line below if: + # - you want to enable the Branch-Protection check on a *public* repository, or + # - you are installing Scorecards on a *private* repository + # To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat. + # repo_token: ${{ secrets.SCORECARD_TOKEN }} + + # Public repositories: + # - Publish results to OpenSSF REST API for easy access by consumers + # - Allows the repository to include the Scorecard badge. + # - See https://github.com/ossf/scorecard-action#publishing-results. + # For private repositories: + # - `publish_results` will always be set to `false`, regardless + # of the value entered here. + publish_results: true + + # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF + # format to the repository Actions tab. + - name: "Upload artifact" + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + # Upload the results to GitHub's code scanning dashboard. + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@2892aa5e19bbd11bc0cff5427e3b750a04d9e3c2 # v4.38.2 + with: + sarif_file: results.sarif diff --git a/.github/workflows/standard.yml b/.github/workflows/standard.yml new file mode 100644 index 0000000000..6f44b6e4e1 --- /dev/null +++ b/.github/workflows/standard.yml @@ -0,0 +1,59 @@ +name: Standard + +on: + push: + branches: + - main + - 0-11-stable + pull_request: + branches: + - main + - 0-11-stable + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: + contents: read + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + standard: + runs-on: ubuntu-24.04 + timeout-minutes: 10 + + steps: + - name: Harden Runner + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + disable-sudo-and-containers: true + egress-policy: block + allowed-endpoints: > + github.com:443 + index.rubygems.org:443 + objects.githubusercontent.com:443 + release-assets.githubusercontent.com:443 + rubygems.org:443 + + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Set up Ruby + uses: ruby/setup-ruby@14594264cd68ce8a2345dd349bc3d138a4ef85c8 # v1.327.0 + with: + rubygems: "4.0.22" + bundler: "4.0.22" + bundler-cache: true + + - run: | + bin/standardrb \ + app/controllers/users_controller.rb \ + app/controllers/unlink_githubs_controller.rb \ + app/controllers/unlink_googles_controller.rb \ + app/interactors \ + app/helpers \ + spec diff --git a/.github/workflows/zizmor.yml b/.github/workflows/zizmor.yml new file mode 100644 index 0000000000..ce2f4292c6 --- /dev/null +++ b/.github/workflows/zizmor.yml @@ -0,0 +1,40 @@ +name: GitHub Actions Security Analysis with zizmor 🌈 + +on: + push: + branches: + - "main" + pull_request: + branches: + - "**" + workflow_dispatch: {} + schedule: + - cron: "0 21 * * 6" + +permissions: {} + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + zizmor: + runs-on: ubuntu-24.04 + permissions: + security-events: write + + steps: + - name: Harden the runner (Audit all outbound calls) + uses: step-security/harden-runner@e14015d583714f6e62063499dc959a02595150a1 # v2.21.1 + with: + egress-policy: audit + + - name: Checkout repository + uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + persist-credentials: false + + - name: Run zizmor 🌈 + uses: zizmorcore/zizmor-action@cc914d7f3750a2d13d75c7f184a1060aa0e9d482 # v0.6.4 + with: + persona: "auditor" diff --git a/.gitignore b/.gitignore index a619dfda94..60f41b34cb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ .bundle +.env db/*.sqlite3 log/*.log tmp/**/* @@ -7,15 +8,15 @@ config/config.yml config/deploy.rb config/deploy config/mongoid.yml -config/newrelic.yml .rvmrc .idea *~ *.rbc .DS_Store *.rbx -bin -bundle coverage +spec/examples.txt *# -.ruby-version +NOTES +*.swp +/node_modules diff --git a/.rspec b/.rspec new file mode 100644 index 0000000000..c99d2e7396 --- /dev/null +++ b/.rspec @@ -0,0 +1 @@ +--require spec_helper diff --git a/.rubocop.yml b/.rubocop.yml new file mode 100644 index 0000000000..2b37dc2206 --- /dev/null +++ b/.rubocop.yml @@ -0,0 +1,471 @@ +plugins: + - rubocop-capybara + - rubocop-rails + - rubocop-rake + - rubocop-rspec + - rubocop-rspec_rails + - rubocop-performance + - rubocop-thread_safety + - rubocop-factory_bot + - rubocop-erb + - rubocop-disable_syntax + +AllCops: + TargetRubyVersion: 4.0 + NewCops: enable + UseProjectIndex: true + ProjectIndexIncludesGems: true + +# We use standard as a linter and formatter instead of Rubocop. +# Also, we are explicitly disable all rubocop rules what +# already enabled in `standard`. And standard-performance. + +# Standard rules. Style: + +# Enforced by `standard`. Disable. +Style/StringLiterals: + Enabled: false + +# Enforced by `standard`. Disable. +Style/HashSyntax: + Enabled: false + +# Enforced by `standard`. Disable. +Style/NestedParenthesizedCalls: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantRegexpArgument: + Enabled: false + +# Enforced by `standard`. Disable. +Style/PercentLiteralDelimiters: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantBegin: + Enabled: false + +# Enforced by `standard`. Disable. +Style/SuperWithArgsParentheses: + Enabled: false + +# Enforced by `standard`. Disable. +Style/Encoding: + Enabled: false + +# Enforced by `standard`. Disable. +Style/NumericLiteralPrefix: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantParentheses: + Enabled: false + +# Enforced by `standard`. Disable. +Style/EmptyMethod: + Enabled: false + +# Enforced by `standard`. Disable. +Style/SingleLineMethods: + Enabled: false + +# Enforced by `standard`. Disable. +Style/SafeNavigation: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RescueStandardError: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantSelf: + Enabled: false + +# Enforced by `standard`. Disable. +Style/TernaryParentheses: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantLineContinuation: + Enabled: false + +# Enforced by `standard`. Disable. +Style/SlicingWithRange: + Enabled: false + +# Enforced by `standard`. Disable. +Style/MultilineIfModifier: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantCondition: + Enabled: false + +# Enforced by `standard`. Disable. +Style/RedundantInterpolation: + Enabled: false + +# Enforced by `standard`. Disable. +Style/OrAssignment: + Enabled: false + +# Enforced by `standard`. Disable. +Style/ConditionalAssignment: + Enabled: false + +# Enforced by `standard`. Disable. +Style/ItAssignment: + Enabled: false + +# Enforced by `standard`. Disable. +Style/EachWithObject: + Enabled: false + +# Enforced by `standard`. Disable. +Style/GlobalStdStream: + Enabled: false + +# Enforced by `standard`. Disable. +Style/StringLiteralsInInterpolation: + Enabled: false + +# Disabled as in `standard`. +Style/HashAsLastArrayItem: + Enabled: false + +# Enforced by `standard`. Disable. +Style/Alias: + Enabled: false + +# Disabled as in `standard`. +Style/IfUnlessModifier: + Enabled: false + +# Disabled as in `standard`. +Style/NegatedIf: + Enabled: false + +# Standard rules. Layout: + +# Enforced by `standard`. Disable. +Layout/HashAlignment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/FirstArrayElementIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/SpaceInsideHashLiteralBraces: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/SpaceInsideStringInterpolation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/DotPosition: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/ExtraSpacing: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/ArgumentAlignment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/MultilineMethodCallBraceLayout: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/AccessModifierIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/FirstHashElementIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/IndentationWidth: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/ElseAlignment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/EndAlignment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/MultilineHashBraceLayout: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/EmptyLineBetweenDefs: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/MultilineArrayBraceLayout: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/EmptyLineAfterMagicComment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/SpaceAroundOperators: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/ArrayAlignment: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/AssignmentIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/ClosingParenthesisIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/LineLength: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/MultilineMethodCallIndentation: + Enabled: false + +# Enforced by `standard`. Disable. +Layout/CaseIndentation: + Enabled: false + +# Standard rules. Lint: + +# Enforced by `standard`. Disable. +Lint/ImplicitStringConcatenation: + Enabled: false + +# Enforced by `standard`. Disable. +Lint/TripleQuotes: + Enabled: false + +# Enforced by `standard`. Disable. +Lint/IneffectiveAccessModifier: + Enabled: false + +# Enforced by `standard`. Disable. +Lint/SymbolConversion: + Enabled: false + +# Enforced by `rubocop` and `standard`. +Lint/CopDirectiveSyntax: + Enabled: true + +# Enforced by `standard`. Disable. +Lint/DuplicateMethods: + Enabled: false + +# Enforced by `standard`. Disable. +Lint/ConstantDefinitionInBlock: + Enabled: false + +# Enforced by `standard`. Disable. +Lint/UselessTimes: + Enabled: false + +# We are using empty blocks in specs as placeholders for future implementation. +Lint/EmptyBlock: + Enabled: false + +# Standard-performance rules. + +# Enforced by `standard-performance`. Disable. +Performance/Detect: + Enabled: false + +# Enforced by `standard-performance`. Disable. +Performance/StringIdentifierArgument: + Enabled: false + +# Enforced by `standard-performance`. Disable. +Performance/RegexpMatch: + Enabled: false + +# Always enable `rubocop` Security: + +# Enforced by `rubocop` and `standard`. +Security/JSONLoad: + Enabled: true + +# Our `rubocop` rules + +# Bundler rules. + +Bundler/OrderedGems: + Enabled: false + +# Gemspec rules + +Gemspec/OrderedDependencies: + Enabled: false + +# Style rules + +# Don't allow %i[foo bar baz] +Style/SymbolArray: + Enabled: true + EnforcedStyle: brackets + +# Don't allow %w[foo bar baz] +Style/WordArray: + Enabled: true + EnforcedStyle: brackets + +# Disable warnings like "Missing top-level documentation comment for" +Style/Documentation: + Enabled: false + +# Disable as in `standard`. +Style/ArgumentsForwarding: + Enabled: false + +# RSpec rules + +# Prefer eq over be. +RSpec/BeEq: + Enabled: false + +# Prefer eq over eql. +RSpec/BeEql: + Enabled: false + +# We prefer to use `expect` over `allow`. +RSpec/StubbedMock: + Enabled: false + +# We prefer multiple before blocks in tests. +RSpec/ScatteredSetup: + Enabled: false + +# We use `expect` in before hooks. +RSpec/ExpectInHook: + Enabled: false + +# We use item_1, item_2, etc. Disable. +RSpec/IndexedLet: + Enabled: false + +# We don't use named subject's +RSpec/NamedSubject: + Enabled: false + +# Ignore `system` and `requests` specs. +RSpec/ExampleLength: + Enabled: true + Exclude: + - "spec/system/**/*.rb" + - "spec/requests/**/*.rb" + +# Ignore multiple expectations in all specs. +RSpec/MultipleExpectations: + Enabled: false + +# Extend maximum example nesting from 3 to 5. +RSpec/NestedGroups: + Enabled: true + Max: 5 + +# Just ignore +RSpec/ScatteredLet: + Enabled: false + +# Enforce receive style +RSpec/MessageSpies: + Enabled: true + EnforcedStyle: receive + +# We prefer `type: :system, retry: 3` instead of sorted `retry: 3, type: :system` +RSpec/SortMetadata: + Enabled: false + +# We prefer `let() { } and then subject {}` +RSpec/LeadingSubject: + Enabled: false + +RSpec/LeakyConstantDeclaration: + Enabled: true + +RSpec/LetSetup: + Enabled: false + +RSpec/LeakyLocalVariable: + Enabled: true + +RSpec/ReceiveMessages: + Enabled: false + +RSpec/EmptyExampleGroup: + Enabled: false + +# Naming rules: + +# Disable anonymous block forwarding. +Naming/BlockForwarding: + Enabled: true + EnforcedStyle: explicit + +# Enable and exclude specific files. +Naming/FileName: + Enabled: true + Exclude: + - "spec/support/mongoid-rspec.rb" + - "spec/support/rspec-retry.rb" + - "spec/support/selenium-webdriver.rb" + - "spec/support/rspec-rebound.rb" + +# name_1, name_2, etc instead of name1, name2 +Naming/VariableNumber: + Enabled: true + EnforcedStyle: snake_case + +# Disabled syntax: + +# Disable shorthand hash syntax like: ({ x:, y: }) +# Disable % style literals +Style/DisableSyntax: + DisableSyntax: + - shorthand_hash_syntax + - percent_literals + +# RSpec Rails rules: + +# This is a new RSpec default. Disable. +RSpecRails/InferredSpecType: + Enabled: false + +RSpecRails/HttpStatusNameConsistency: + Enabled: true + +# Rails rules: + +# We don't use ActiveRecord. +Rails/ActiveRecordAliases: + Enabled: false + +# We don't use ActiveRecord. +Rails/SkipsModelValidations: + Enabled: false + +Capybara/AmbiguousClick: + Enabled: true + +Metrics/BlockLength: + Enabled: true + Exclude: + - "config/routes.rb" + - "config/initializers/devise.rb" diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000000..43beb4001b --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +4.0.7 diff --git a/.standard.yml b/.standard.yml new file mode 100644 index 0000000000..323fdc27c4 --- /dev/null +++ b/.standard.yml @@ -0,0 +1 @@ +ruby_version: 4.0 diff --git a/.tool-versions b/.tool-versions new file mode 100644 index 0000000000..f6db94fe04 --- /dev/null +++ b/.tool-versions @@ -0,0 +1 @@ +nodejs 24.21.0 diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d71f7f546b..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,16 +0,0 @@ -language: ruby -env: - - COVERAGE=true -rvm: - - 2.0.0 - - 1.9.3 - - rbx-19mode -services: mongodb -#script: ./script/rspec-queue-mongoid.rb --format progress spec -matrix: - allow_failures: - - rvm: rbx-19mode - -# To stop Travis from running tests for a new commit, -# add the following to your commit message: [ci skip] -# You should add this when you edit documentation or comments, etc. diff --git a/CHANGELOG.md b/CHANGELOG.md deleted file mode 100644 index 1e79575e82..0000000000 --- a/CHANGELOG.md +++ /dev/null @@ -1,169 +0,0 @@ -## 0.3.0 - Not released Yet - -### Improvements - -- [#515][] Update to Mongoid 3.1 ([@arthurnn][], [@shingara][]) -- Drop the 1.8 support -- [#289][] Add unwatch button on App view ([@numbata][], [@shingara][]) - - -[@arthurnn]: https://github.com/arthurnn -[@numbata]: https://github.com/numbata -[@shingara]: https://github.com/shingara - -[#289]: https://github.com/errbit/errbit/issues/289 -[#515]: https://github.com/errbit/errbit/issues/515 - -## 0.2.1 - Not released Yet - -### Improvements - -- [#552][] Limite size of asset on errbit ([@tscolari][]) -- [#562][] See the version number of errbit on footer ([@nashby][]) -- [#555][] Avoid same group by same error if other line of backtrace - instead of first change ([@shingara][]) - -### Bug Fixes - -- [#558][] Avoid failure if you remote bitbucket_rest_api gem - ([@shingara][]) -- [#559][] Fix some issue on the migration with old database - ([@shingara][]) - -[@nashby]: https://github.com/nashby -[@shingara]: https://github.com/shingara -[@tscolari]: https://github.com/tscolari - -[#552]: https://github.com/errbit/errbit/issues/552 -[#558]: https://github.com/errbit/errbit/issues/558 -[#562]: https://github.com/errbit/errbit/issues/562 - -## 0.2.0 - 2013-09-11 - -### Improvements - -- Update some gems ([@shingara][]) -- [#492][] Improve some Pjax call ([@nfedyashev][]) -- [#428][] Add the support of Unfuddle Issue Tracker ([@parallel588][]) -- Avoid to delete his own user ([@shingara][]) -- [#456][] Avoid to delete admin access of current user logged ([@shingara][]) -- [#253][] Refactor the Fingerprint generation ([@boblail][]) -- [#508][] Merge comments to when you merge problems ([@shingara][]) -- Update the Devise Gem to the last one ([@shingara][]) -- [#524][] Add current user information on the notifer.js ([@roryf][]) -- [#523][] Update javascript-stacktrace ([@aliscott][]) -- [#516][] Add Jira Issue tracker ([@xenji][]) -- [#512][] Add capabilities to configure the use of sendmail to send - email from Errbit ([@shingara][]) -- [#532][] Use https link in Gravatar if you use errbit on https - ([@jeroenj][]) -- [#536][] Order app by name by default ([@2called-chaos][]) -- [#542][] Allow the MONGODB_URL env configuration about Mongodb ([@bacongobbler][]) -- [#530][] Improve the flowdock notification ([@nfedyashev][]) -- [#531][] Improve the HipChat notification message ([@brendonrapp][]) - - -### Bug Fixes - -- [#343][] Fix the ical generation. ([@shingara][]) -- [#503][] Fix issue on where the service_url choose never use. ([@nfedyashev][]) -- [#506][] Fix issue on bitbucket issue tracker creation failed. ([@Gonzih][]) -- [#514][] Add CDATA in xml return by Javascript. ([@mildavw][]) -- [#517][] Javascript escape path from javascript Notifier. ([@roryf][]) -- [#518][] Fix issue when you try launch task errbit:db:update_update_problem_attrs. ([@shingara][]) -- [#526][] Fix issue of pagination after search. ([@shingara][]) -- [#528][] Fix issue of action after search. ([@shingara][]) - -## 0.1.0 - 2013-05-29 - -### Improvements - -- [#474][] Improve message when access denied. ([@chadcf][]) -- [#468][] Launch a repairDatabase in MongoDB database after launching - the clear_resolved task. ([@shingara][]) -- Update gem of Mongoid to 2.7.1 -- Update gem of Mongo to 1.8.5 -- [#457][] Add task information about db:seed in Readme. ([@mildavw][]) -- Add support of Ruby 2.0.0 -- [#475][] Return a HTTP 422 status code when you try push notice with - bad api key. ([@shingara][]) -- Return a 400 http status when you try put a notice without args. - ([@shingara][]) -- [#486][] Add confirms box when you do massive action. ([@manuelmeurer][]) -- [#487][] Add specific template to redmine notification with less useless data. ([@tvdeyen][]) - -### Bug fixes - -- [#469][] Fix issue about the documentation of new heroku addons usage. - ([@adamjt][]) -- [#455][] Avoid raising exception if you comment an exception and no - other user are define to received this comment. ([@alvarobp][]) -- [#453][] Fix ruby 2.0.0 incompatibilities with gem ([@SamSaffron][]) -- [#476][] Fix javascript notifier issue with IE8 ([@sdepold][]) -- [#466][] Fix not see problem if octokit gem not define ([@tamaloa][]) -- [#460][] Fix issue when you try see user with gravatar activate but no - email define to this user ([@ivanyv][]) -- [#478][] Fix issue about calculation of statisque of problem after - merge ([@shingara][]) - - - -[#253]: https://github.com/errbit/errbit/issues/253 -[#343]: https://github.com/errbit/errbit/issues/343 -[#428]: https://github.com/errbit/errbit/issues/428 -[#453]: https://github.com/errbit/errbit/issues/453 -[#455]: https://github.com/errbit/errbit/issues/455 -[#456]: https://github.com/errbit/errbit/issues/456 -[#457]: https://github.com/errbit/errbit/issues/457 -[#460]: https://github.com/errbit/errbit/issues/460 -[#466]: https://github.com/errbit/errbit/issues/466 -[#468]: https://github.com/errbit/errbit/issues/468 -[#469]: https://github.com/errbit/errbit/issues/469 -[#474]: https://github.com/errbit/errbit/issues/474 -[#475]: https://github.com/errbit/errbit/issues/475 -[#476]: https://github.com/errbit/errbit/issues/476 -[#478]: https://github.com/errbit/errbit/issues/478 -[#487]: https://github.com/errbit/errbit/issues/487 -[#486]: https://github.com/errbit/errbit/issues/486 -[#492]: https://github.com/errbit/errbit/issues/492 -[#503]: https://github.com/errbit/errbit/issues/503 -[#506]: https://github.com/errbit/errbit/issues/506 -[#508]: https://github.com/errbit/errbit/issues/508 -[#514]: https://github.com/errbit/errbit/issues/514 -[#516]: https://github.com/errbit/errbit/issues/516 -[#517]: https://github.com/errbit/errbit/issues/517 -[#524]: https://github.com/errbit/errbit/issues/524 -[#526]: https://github.com/errbit/errbit/issues/526 -[#528]: https://github.com/errbit/errbit/issues/528 -[#530]: https://github.com/errbit/errbit/issues/530 -[#531]: https://github.com/errbit/errbit/issues/531 -[#532]: https://github.com/errbit/errbit/issues/532 -[#542]: https://github.com/errbit/errbit/issues/542 - - - -[@2called-chaos]: https://github.com/2called-chaos -[@Gonzih]: https://github.com/Gonzih -[@SamSaffron]: https://github.com/SamSaffron -[@adamjt]: https://github.com/adamjt -[@aliscott]: http://github.com/aliscott -[@alvarobp]: https://github.com/alvarobp -[@arthurnn]: https://github.com/arthurnn -[@bacongobbler]: https://github.com/bacongobbler -[@boblail]: https://github.com/boblail -[@brendonrapp]: https://github.com/brendonrapp -[@chadcf]: https://github.com/chadcf -[@ivanyv]: https://github.com/ivanyv -[@jeroenj]: https://github.com/jeroenj -[@manuelmeurer]: https://github.com/manuelmeurer -[@mildavw]: https://github.com/mildavw -[@mildavw]: https://github.com/mildavw -[@nfedyashev]: https://github.com/nfedyashev -[@parallel588]: https://github.com/parallel588 -[@roryf]: https://github.com/roryf -[@sdepold]: https://github.com/sdepold -[@shingara]: https://github.com/shingara -[@tamaloa]: https://github.com/tamaloa -[@tvdeyen]: https://github.com/tvdeyen -[@williamn]: https://github.com/williamn -[@xenji]: https://github.com/xenji diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000000..ee8f92a03c --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,44 @@ +# Contributing to Errbit + +Thanks for your interest in improving Errbit. We'd love to have you as a +contributor. Guidelines for contributing code to Errbit depend on the +nature of your contribution. If your contribution adds a new feature to +Errbit, the section on 'Feature Requests' does apply. Otherwise, just +follow the guidelines under 'All Contributions' below. + +## All Contributions + +All code change contributions should be made through the following steps: + +1. Fork `errbit/errbit` on GitHub +2. Create a branch with a descriptive name +3. Make your changes +4. Submit a pull request with a clear explanation of what you have + changed and why + +For code changes: +- Update the tests to prevent regressions and prove your changes work +- Update the documentation in the `docs/` folder +- For anything that should be configurable, use environment variables and + update the [configuration documentation](docs/configuration.md) + +## Feature Requests + +If you'd like to add a feature to Errbit, please start by opening an +issue on GitHub with a description of what you'd like to add and why. If +your feature requires a deeper level of discussion, talk it over with +the other maintainers. + +In general, new features should add value without detracting +significantly from usability, security, performance, ease of deployment +and maintainability. Keep in mind that by putting in a pull request for +a new feature, you are asking other people to maintain your code +indefinitely. Your feature is more likely to become part of Errbit if it +appears easy to maintain and if you are able to help maintain it. + +Errbit maintainers do review all contributions, but certain kinds of +contributions take priority. Security-related changes, bug fixes, test +improvements, documentation improvements, and usability enhancements all +take priority over feature requests. But we are open to adding new +features, so if you have a good one in mind, just open a GitHub issue so +we can start a conversation. diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md deleted file mode 100644 index a2d86de84a..0000000000 --- a/CONTRIBUTORS.md +++ /dev/null @@ -1,81 +0,0 @@ -## 0.3.0 - Not released yet - -- [@arthurnn][] -- [@numbata][] -- [@shingara][] - -[@arthurnn]: https://github.com/arthurnn -[@numbata]: https://github.com/numbata -[@shingara]: https://github.com/shingara - -## 0.2.1 - Not released yet - -- [@anicet][] -- [@nashby][] -- [@shingara][] -- [@tscolari][] - -[@anicet]: https://github.com/anicet -[@nashby]: https://github.com/nashby -[@shingara]: https://github.com/shingara -[@tscolari]: https://github.com/tscolari - -## 0.2.0 - 2013-09-11 - -- [@2called-chaos][] -- [@Gonzih][] -- [@aliscott][] -- [@arthurnn][] -- [@bacongobbler][] -- [@boblail][] -- [@brendonrapp][] -- [@jeroenj][] -- [@mildavw][] -- [@nfedyashev][] -- [@parallel588][] -- [@roryf][] -- [@shingara][] -- [@williamn][] -- [@xenji][] - -## 0.1.0 - 2013-05-29 - -- [@manuelmeurer][] -- [@mildavw][] -- [@chadcf][] -- [@shingara][] -- [@tvdeyen][] -- [@adamjt][] -- [@alvarobp][] -- [@SamSaffron][] -- [@sdepold][] -- [@tamaloa][] -- [@ivanyv][] - - - -[@2called-chaos]: https://github.com/2called-chaos -[@Gonzih]: https://github.com/Gonzih -[@SamSaffron]: https://github.com/SamSaffron -[@adamjt]: https://github.com/adamjt -[@aliscott]: http://github.com/aliscott -[@alvarobp]: https://github.com/alvarobp -[@arthurnn]: https://github.com/arthurnn -[@bacongobbler]: https://github.com/bacongobbler -[@boblail]: https://github.com/boblail -[@brendonrapp]: https://github.com/brendonrapp -[@chadcf]: https://github.com/chadcf -[@ivanyv]: https://github.com/ivanyv -[@jeroenj]: https://github.com/jeroenj -[@manuelmeurer]: https://github.com/manuelmeurer -[@mildavw]: https://github.com/mildavw -[@mildavw]: https://github.com/mildavw -[@nfedyashev]: https://github.com/nfedyashev -[@parallel588]: https://github.com/parallel588 -[@roryf]: https://github.com/roryf -[@sdepold]: https://github.com/sdepold -[@shingara]: https://github.com/shingara -[@tamaloa]: https://github.com/tamaloa -[@tvdeyen]: https://github.com/tvdeyen -[@williamn]: https://github.com/williamn -[@xenji]: https://github.com/xenji diff --git a/Capfile b/Capfile deleted file mode 100644 index e04728e8d3..0000000000 --- a/Capfile +++ /dev/null @@ -1,4 +0,0 @@ -load 'deploy' if respond_to?(:namespace) # cap2 differentiator -Dir['vendor/plugins/*/recipes/*.rb'].each { |plugin| load(plugin) } - -load 'config/deploy' # remove this line to skip loading any of the default tasks \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..afe7287a88 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,76 @@ +# syntax = docker/dockerfile:1 + +FROM registry.docker.com/library/ruby:4.0.7-slim@sha256:db9ddd17cc6ac603f2497d98ac5c88e4118908d6f9a45f2422ebee141f91e485 AS base + +# Rails app lives here +WORKDIR /rails + +# Install base packages +RUN set -eux ; \ + apt-get update -qq ; \ + apt-get dist-upgrade -qq ; \ + apt-get install --no-install-recommends -y curl libjemalloc2 shared-mime-info ; \ + rm -rf /var/lib/apt/lists /var/cache/apt/archives + +# Set production environment +# https://github.com/rails/rails/pull/46981 +# https://github.com/rails/rails/commit/1a7e88323e6e92bf2d3ddf397b3023529b505e86#commitcomment-96003108 +# We don't use this image for testing on CI, so: add "test" to BUNDLE_WITHOUT +ENV RAILS_ENV="production" \ + BUNDLE_DEPLOYMENT="1" \ + BUNDLE_PATH="/usr/local/bundle" \ + BUNDLE_WITHOUT="development:test" \ + BOOTSNAP_LOG="true" \ + BOOTSNAP_READONLY="true" + +RUN set -eux ; \ + gem update --system "4.0.22" ; \ + gem install bundler --version "4.0.22" --force + +# Throw-away build stage to reduce size of final image +FROM base AS build + +# Install packages needed to build gems +RUN set -eux ; \ + apt-get update -qq ; \ + apt-get dist-upgrade -qq ; \ + apt-get install --no-install-recommends -y build-essential git pkg-config libyaml-dev + +# Install application gems +COPY .ruby-version Gemfile Gemfile.lock UserGemfile ./ +RUN set -eux ; \ + bundle install ; \ + rm -rf ~/.bundle/ "${BUNDLE_PATH}"/ruby/*/cache "${BUNDLE_PATH}"/ruby/*/bundler/gems/*/.git ; \ + bundle exec bootsnap precompile --gemfile + +# Copy application code +COPY . . + +# Precompile bootsnap code for faster boot times +RUN bundle exec bootsnap precompile app/ lib/ config/ Rakefile + +# Precompiling assets for production without requiring secret RAILS_MASTER_KEY +RUN SECRET_KEY_BASE_DUMMY=1 ./bin/rails assets:precompile + +# Final stage for app image +FROM base + +# Copy built artifacts: gems, application +COPY --from=build "${BUNDLE_PATH}" "${BUNDLE_PATH}" +COPY --from=build /rails /rails + +# Run and own only the runtime files as a non-root user for security +RUN set -eux ; \ + groupadd --system --gid 1000 rails ; \ + useradd rails --uid 1000 --gid 1000 --create-home --shell /bin/bash ; \ + chown -R rails:rails db log storage tmp + +USER 1000:1000 + +# Entrypoint prepares the database. +ENTRYPOINT ["/rails/bin/docker-entrypoint"] + +# Start server via Thruster by default, this can be overwritten at runtime +EXPOSE 80/tcp + +CMD ["./bin/thrust", "./bin/rails", "server"] diff --git a/Gemfile b/Gemfile index 1437dc1a55..1589c52a08 100644 --- a/Gemfile +++ b/Gemfile @@ -1,135 +1,114 @@ -source 'https://rubygems.org' - -RAILS_VERSION = '~> 3.2.14' - -gem 'actionmailer', RAILS_VERSION -gem 'actionpack', RAILS_VERSION -gem 'railties', RAILS_VERSION - -gem 'mongoid' - -gem 'mongoid_rails_migrations' -gem 'devise' -gem 'haml' -gem 'htmlentities' -gem 'rack-ssl', :require => 'rack/ssl' # force SSL - -gem 'useragent' -gem 'decent_exposure' -gem 'strong_parameters' -gem 'actionmailer_inline_css' -gem 'kaminari', '>= 0.14.1' -gem 'rack-ssl-enforcer', :require => false -gem 'fabrication' -gem 'rails_autolink' -# Please don't update hoptoad_notifier to airbrake. -# It's for internal use only, and we monkeypatch certain methods -gem 'hoptoad_notifier', "~> 2.4" - - -# Remove / comment out any of the gems below if you want to disable -# a given issue tracker, notification service, or authentication. - -# Issue Trackers -# --------------------------------------- -# Lighthouse -gem 'lighthouse-api' -# Redmine -gem 'oruen_redmine_client', :require => 'redmine_client' -# Pivotal Tracker -gem 'pivotal-tracker' -# Fogbugz -gem 'ruby-fogbugz', :require => 'fogbugz' -# Github Issues -gem 'octokit', '~> 1.18' -# Gitlab -gem 'gitlab', :git => 'https://github.com/NARKOZ/gitlab.git' - -# Bitbucket Issues -gem 'bitbucket_rest_api', :require => false - -# Unfuddle -gem "taskmapper" -gem "taskmapper-unfuddle" - -# Jira -gem 'jira-ruby', :require => 'jira' +# frozen_string_literal: true + +source "https://rubygems.org" + +ruby file: ".ruby-version" + +gem "rails", "8.1.4" + +gem "sprockets-rails" +gem "stimulus-rails" +gem "importmap-rails" +gem "turbo-rails" +gem "activemodel-serializers-xml" +gem "actionmailer_inline_css" +gem "decent_exposure" +gem "devise" +gem "devise-i18n" +gem "pundit" +gem "dotenv" +gem "draper" +gem "errbit_plugin" +gem "errbit_github_plugin" +gem "font-awesome-rails" +gem "htmlentities" +gem "kaminari" +gem "kaminari-mongoid" +gem "kaminari-i18n" +gem "mongoid" +gem "faraday-retry" +gem "octokit" +gem "omniauth" +gem "omniauth-rails_csrf_protection" +gem "omniauth-github" +gem "omniauth-google-oauth2" +gem "rails_autolink" +gem "rails-i18n" +gem "inline_svg" +gem "useragent" +gem "nokogiri" +gem "uri" +gem "rack-timeout" +gem "puma" +gem "ostruct" +gem "securerandom" +gem "airbrake", require: false # Notification services # --------------------------------------- -gem 'campy' -# Hipchat -gem 'hipchat' -# Google Talk -gem 'xmpp4r', :require => ["xmpp4r", "xmpp4r/muc"] +gem "campy" # Hoiio (SMS) -gem 'hoi' -# Pushover (iOS Push notifications) -gem 'rushover' +gem "hoi" +# Pushover.net (iOS/Android Push notifications) +gem "pushover2" # Hubot -gem 'httparty' -# Flowdock -gem 'flowdock' +gem "httparty" -# Authentication -# --------------------------------------- -# GitHub OAuth -gem 'omniauth-github' +gem "icalendar" +gem "json" + +gem "pry-rails" -gem 'ri_cal' -gem 'yajl-ruby', :require => "yajl" +# Reduces boot times through caching; required in config/boot.rb +gem "bootsnap", ">= 1.4.4", require: false + +# Add HTTP asset caching/compression and X-Sendfile acceleration to Puma [https://github.com/basecamp/thruster/] +gem "thruster", require: false group :development, :test do - gem 'rspec-rails', '~> 2.6' - gem 'webmock', :require => false - gem 'airbrake', :require => false - gem 'ruby-debug', :platform => :mri_18 - gem 'debugger', :platform => :mri_19 - gem 'pry-rails' -# gem 'rpm_contrib' -# gem 'newrelic_rpm' - gem 'quiet_assets' + gem "rubydex", require: false + gem "rubocop", require: false + gem "rubocop-rails", require: false + gem "rubocop-rake", require: false + gem "rubocop-capybara", require: false + gem "rubocop-rspec", require: false + gem "rubocop-rspec_rails", require: false + gem "rubocop-performance", require: false + gem "rubocop-disable_syntax", require: false + gem "rubocop-thread_safety", require: false + gem "rubocop-factory_bot", require: false + gem "rubocop-erb", require: false + gem "standard", "1.56.0", require: false + gem "faker" + gem "factory_bot_rails" + gem "brakeman", require: false + gem "herb", require: false end group :development do - gem 'capistrano' - - # better errors - gem 'better_errors' - gem 'binding_of_caller' - gem 'meta_request' - gem 'foreman', :require => false - - # Use thin for development - gem 'puma', :require => false - + gem "listen", "~> 3.10" + gem "bundler-audit", require: false end group :test do - gem 'capybara' - gem 'launchy' - gem 'database_cleaner' - gem 'email_spec' - gem 'timecop' - gem 'coveralls', :require => false - gem 'mongoid-rspec', :require => false + gem "rails-controller-testing" + gem "rspec-rails", require: false + gem "rspec-rebound", require: false + gem "rspec-activemodel-mocks" + gem "mongoid-rspec" + gem "pundit-matchers" + gem "capybara" + gem "selenium-webdriver" + gem "launchy" + gem "email_spec" + gem "simplecov", require: false + gem "super_diff" + gem "webmock" + gem "vcr" end -group :heroku, :production do - gem 'unicorn', :require => false -end +gem "jquery-rails" +gem "pjax_rails" +gem "underscore-rails" - -# Gems used only for assets and not required -# in production environments by default. -group :assets do - gem 'execjs' - gem 'therubyracer', :platform => :ruby # C Ruby (MRI) or Rubinius, but NOT Windows - gem 'uglifier', '>= 1.0.3' - # We can't upgrade because not compatible to jquery >= 1.9. - # To do that, we need fix the rails.js - gem 'jquery-rails', '~> 2.1.4' - gem 'pjax_rails' - gem 'underscore-rails' - gem 'turbo-sprockets-rails3' -end +eval_gemfile "./UserGemfile" diff --git a/Gemfile.lock b/Gemfile.lock index cf86d52c62..f31a6864c6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,447 +1,1012 @@ -GIT - remote: https://github.com/NARKOZ/gitlab.git - revision: 7a00d38c53335010d2fb8a233247fe2c97338903 - specs: - gitlab (2.2.0) - httparty - GEM remote: https://rubygems.org/ specs: - actionmailer (3.2.14) - actionpack (= 3.2.14) - mail (~> 2.5.4) - actionmailer_inline_css (1.5.3) + action_text-trix (2.1.19) + railties + actioncable (8.1.4) + actionpack (= 8.1.4) + activesupport (= 8.1.4) + nio4r (~> 2.0) + websocket-driver (>= 0.6.1) + zeitwerk (~> 2.6) + actionmailbox (8.1.4) + actionpack (= 8.1.4) + activejob (= 8.1.4) + activerecord (= 8.1.4) + activestorage (= 8.1.4) + activesupport (= 8.1.4) + mail (>= 2.8.0) + actionmailer (8.1.4) + actionpack (= 8.1.4) + actionview (= 8.1.4) + activejob (= 8.1.4) + activesupport (= 8.1.4) + mail (>= 2.8.0) + rails-dom-testing (~> 2.2) + actionmailer_inline_css (1.6.0) actionmailer (>= 3.0.0) - nokogiri (>= 1.4.4) - premailer (>= 1.7.1) - actionpack (3.2.14) - activemodel (= 3.2.14) - activesupport (= 3.2.14) - builder (~> 3.0.0) - erubis (~> 2.7.0) - journey (~> 1.0.4) - rack (~> 1.4.5) - rack-cache (~> 1.2) - rack-test (~> 0.6.1) - sprockets (~> 2.2.1) - activemodel (3.2.14) - activesupport (= 3.2.14) - builder (~> 3.0.0) - activerecord (3.2.14) - activemodel (= 3.2.14) - activesupport (= 3.2.14) - arel (~> 3.0.2) - tzinfo (~> 0.3.29) - activeresource (3.2.14) - activemodel (= 3.2.14) - activesupport (= 3.2.14) - activesupport (3.2.14) - i18n (~> 0.6, >= 0.6.4) - multi_json (~> 1.0) - addressable (2.3.5) - airbrake (3.1.14) - builder + nokogiri (>= 1.7.0) + premailer (>= 1.11.0) + actionpack (8.1.4) + actionview (= 8.1.4) + activesupport (= 8.1.4) + nokogiri (>= 1.8.5) + rack (>= 2.2.4) + rack-session (>= 1.0.1) + rack-test (>= 0.6.3) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + useragent (~> 0.16) + actiontext (8.1.4) + action_text-trix (~> 2.1.15) + actionpack (= 8.1.4) + activerecord (= 8.1.4) + activestorage (= 8.1.4) + activesupport (= 8.1.4) + globalid (>= 0.6.0) + nokogiri (>= 1.8.5) + actionview (8.1.4) + activesupport (= 8.1.4) + builder (~> 3.1) + erubi (~> 1.11) + rails-dom-testing (~> 2.2) + rails-html-sanitizer (~> 1.6) + activejob (8.1.4) + activesupport (= 8.1.4) + globalid (>= 0.3.6) + activemodel (8.1.4) + activesupport (= 8.1.4) + activemodel-serializers-xml (1.0.3) + activemodel (>= 5.0.0.a) + activesupport (>= 5.0.0.a) + builder (~> 3.1) + activerecord (8.1.4) + activemodel (= 8.1.4) + activesupport (= 8.1.4) + timeout (>= 0.4.0) + activestorage (8.1.4) + actionpack (= 8.1.4) + activejob (= 8.1.4) + activerecord (= 8.1.4) + activesupport (= 8.1.4) + marcel (~> 1.0) + activesupport (8.1.4) + base64 + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) json - arel (3.0.2) - atomic (1.1.14) - bcrypt-ruby (3.1.2) - better_errors (1.0.1) - coderay (>= 1.0.0) - erubis (>= 2.6.6) - binding_of_caller (0.7.2) - debug_inspector (>= 0.0.1) - bitbucket_rest_api (0.1.4) - faraday (~> 0.8.1) - faraday_middleware (~> 0.9.0) - hashie (~> 2.0.5) - multi_json (~> 1.3) - nokogiri (~> 1.5.2) - simple_oauth - builder (3.0.4) - callsite (0.0.11) + logger (>= 1.4.2) + minitest (>= 5.1) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + uri (>= 0.13.1) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + airbrake (13.0.5) + airbrake-ruby (~> 6.0) + airbrake-ruby (6.2.2) + rbtree3 (~> 0.6) + anonymous_loader (0.1.3) + version_gem (~> 1.1, >= 1.1.14) + ast (2.4.3) + attr_extras (7.1.0) + auth-sanitizer (0.2.3) + version_gem (~> 1.1, >= 1.1.14) + base64 (0.3.0) + bcrypt (3.1.22) + bigdecimal (4.1.3) + bootsnap (1.26.0) + msgpack (~> 1.5) + brakeman (8.0.6) + racc + bson (5.2.0) + builder (3.3.0) + bundler-audit (0.9.3) + bundler (>= 1.2.0) + thor (~> 1.0) campy (1.0.0) - capistrano (2.15.5) - highline - net-scp (>= 1.0.0) - net-sftp (>= 2.0.0) - net-ssh (>= 2.0.14) - net-ssh-gateway (>= 1.1.0) - capybara (2.1.0) - mime-types (>= 1.16) - nokogiri (>= 1.3.3) - rack (>= 1.0.0) - rack-test (>= 0.5.4) - xpath (~> 2.0) - coderay (1.0.9) - columnize (0.3.6) - coveralls (0.7.0) - multi_json (~> 1.3) - rest-client - simplecov (>= 0.7) - term-ansicolor - thor - crack (0.4.1) - safe_yaml (~> 0.9.0) - css_parser (1.3.5) + capybara (3.40.0) + addressable + matrix + mini_mime (>= 0.1.3) + nokogiri (~> 1.11) + rack (>= 1.6.0) + rack-test (>= 0.6.3) + regexp_parser (>= 1.5, < 3.0) + xpath (~> 3.2) + childprocess (5.1.0) + logger (~> 1.5) + coderay (1.1.3) + concurrent-ruby (1.3.8) + connection_pool (3.0.2) + crack (1.0.1) + bigdecimal + rexml + crass (1.0.7) + css_parser (3.2.0) addressable - database_cleaner (1.1.1) - debug_inspector (0.0.2) - debugger (1.6.2) - columnize (>= 0.3.1) - debugger-linecache (~> 1.2.0) - debugger-ruby_core_source (~> 1.2.3) - debugger-linecache (1.2.0) - debugger-ruby_core_source (1.2.3) - decent_exposure (2.3.0) - devise (3.1.0) - bcrypt-ruby (~> 3.0) + base64 + ssrf_filter (~> 1.5) + csv (3.3.6) + date (3.5.1) + decent_exposure (3.0.4) + activesupport (>= 4.0) + devise (5.0.4) + bcrypt (~> 3.0) orm_adapter (~> 0.1) - railties (>= 3.2.6, < 5) - thread_safe (~> 0.1) + railties (>= 7.0) + responders warden (~> 1.2.3) - diff-lcs (1.2.4) - dotenv (0.9.0) - email_spec (1.5.0) - launchy (~> 2.1) - mail (~> 2.2) - erubis (2.7.0) - execjs (2.0.1) - fabrication (2.8.1) - faraday (0.8.8) - multipart-post (~> 1.2.0) - faraday_middleware (0.9.0) - faraday (>= 0.7.4, < 0.9) - flowdock (0.3.1) - httparty (~> 0.7) - multi_json - foreman (0.63.0) - dotenv (>= 0.7) - thor (>= 0.13.6) - haml (4.0.3) - tilt - happymapper (0.4.1) - libxml-ruby (~> 2.0) - hashie (2.0.5) - highline (1.6.19) - hike (1.2.3) - hipchat (0.12.0) - httparty - hoi (0.0.6) - httparty (> 0.6.0) - json (> 1.4.0) - hoptoad_notifier (2.4.11) + devise-i18n (1.16.1) + devise (>= 5.0.0) + rails-i18n + diff-lcs (1.6.2) + dotenv (3.2.0) + draper (4.0.6) + actionpack (>= 5.0) + activemodel (>= 5.0) + activemodel-serializers-xml (>= 1.0) + activesupport (>= 5.0) + request_store (>= 1.0) + ruby2_keywords + drb (2.2.3) + email_spec (2.3.1) + htmlentities (~> 4.3) + launchy (>= 2.1, < 4.0) + mail (~> 2.7) + erb (6.0.7) + errbit_github_plugin (0.5.0) activesupport - builder - htmlentities (4.3.1) - httparty (0.11.0) - multi_json (~> 1.0) + errbit_plugin + faraday-retry + octokit + errbit_plugin (0.8.0) + erubi (1.13.1) + factory_bot (6.6.0) + activesupport (>= 6.1.0) + factory_bot_rails (6.5.1) + factory_bot (~> 6.5) + railties (>= 6.1.0) + faker (3.8.0) + i18n (>= 1.8.11, < 2) + faraday (2.14.4) + faraday-net_http (>= 2.0, < 3.5) + json + logger + faraday-net_http (3.4.4) + net-http (~> 0.5) + faraday-retry (2.4.0) + faraday (~> 2.0) + ffi (1.17.4) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x86-linux-gnu) + ffi (1.17.4-x86-linux-musl) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) + font-awesome-rails (4.7.0.9) + railties (>= 3.2, < 9.0) + globalid (1.4.0) + activesupport (>= 6.1) + hashdiff (1.2.1) + hashie (5.1.0) + logger + herb (0.11.0) + herb (0.11.0-aarch64-linux-gnu) + herb (0.11.0-aarch64-linux-musl) + herb (0.11.0-arm-linux-gnu) + herb (0.11.0-arm-linux-musl) + herb (0.11.0-arm64-darwin) + herb (0.11.0-x86-linux-gnu) + herb (0.11.0-x86-linux-musl) + herb (0.11.0-x86_64-darwin) + herb (0.11.0-x86_64-linux-gnu) + herb (0.11.0-x86_64-linux-musl) + hoi (0.0.7) + httparty + json + htmlentities (4.4.2) + httparty (0.24.2) + csv + mini_mime (>= 1.0.0) multi_xml (>= 0.5.2) - httpauth (0.2.0) - i18n (0.6.5) - jira-ruby (0.1.2) - activesupport - oauth - railties - journey (1.0.4) - jquery-rails (2.1.4) - railties (>= 3.0, < 5.0) + i18n (1.15.2) + concurrent-ruby (~> 1.0) + icalendar (2.12.5) + base64 + ice_cube (~> 0.16) + logger + ostruct + ice_cube (0.17.0) + importmap-rails (2.2.3) + actionpack (>= 6.0.0) + activesupport (>= 6.0.0) + railties (>= 6.0.0) + inline_svg (1.10.0) + activesupport (>= 3.0) + nokogiri (>= 1.6) + io-console (0.9.4) + irb (1.18.0) + pp (>= 0.6.0) + prism (>= 1.3.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) + jquery-rails (4.6.1) + rails-dom-testing (>= 1, < 3) + railties (>= 4.2.0) thor (>= 0.14, < 2.0) - json (1.8.0) - jwt (0.1.8) - multi_json (>= 1.5) - kaminari (0.14.1) - actionpack (>= 3.0.0) - activesupport (>= 3.0.0) - kgio (2.8.1) - launchy (2.3.0) - addressable (~> 2.3) - libv8 (3.16.14.3) - libxml-ruby (2.7.0) - lighthouse-api (2.0) - activeresource (>= 3.0.0) - activesupport (>= 3.0.0) - linecache (0.46) - rbx-require-relative (> 0.0.4) - mail (2.5.4) - mime-types (~> 1.16) - treetop (~> 1.4.8) - meta_request (0.2.8) - callsite - rack-contrib - railties - method_source (0.8.2) - mime-types (1.25) - mongoid (3.1.5) - activemodel (~> 3.2) - moped (~> 1.4) - origin (~> 1.0) - tzinfo (~> 0.3.29) - mongoid-rspec (1.9.0) - mongoid (>= 3.0.1) - rake - rspec (>= 2.14) - mongoid_rails_migrations (1.0.1) - activesupport (>= 3.2.0) - bundler (>= 1.0.0) - rails (>= 3.2.0) - railties (>= 3.2.0) - moped (1.5.1) - multi_json (1.8.0) - multi_xml (0.5.5) - multipart-post (1.2.0) - net-scp (1.1.2) - net-ssh (>= 2.6.5) - net-sftp (2.1.2) - net-ssh (>= 2.6.5) - net-ssh (2.7.0) - net-ssh-gateway (1.2.0) - net-ssh (>= 2.6.5) - netrc (0.7.7) - nokogiri (1.5.10) - nokogiri-happymapper (0.5.7) - nokogiri (~> 1.5) - oauth (0.4.7) - oauth2 (0.8.1) - faraday (~> 0.8) - httpauth (~> 0.1) - jwt (~> 0.1.4) - multi_json (~> 1.0) - rack (~> 1.2) - octokit (1.25.0) - addressable (~> 2.2) - faraday (~> 0.8) - faraday_middleware (~> 0.9) - hashie (~> 2.0) - multi_json (~> 1.3) - netrc (~> 0.7.7) - omniauth (1.1.4) - hashie (>= 1.2, < 3) - rack - omniauth-github (1.1.1) - omniauth (~> 1.0) - omniauth-oauth2 (~> 1.1) - omniauth-oauth2 (1.1.1) - oauth2 (~> 0.8.0) - omniauth (~> 1.0) - origin (1.1.0) - orm_adapter (0.4.0) - oruen_redmine_client (0.0.1) - activeresource (>= 2.3.0) - pivotal-tracker (0.5.12) - builder - builder - crack - happymapper (>= 0.3.2) - nokogiri (>= 1.4.3) - nokogiri (>= 1.5.5) - nokogiri-happymapper (>= 0.5.4) - rest-client (~> 1.6.0) - rest-client (~> 1.6.0) - pjax_rails (0.3.4) + json (2.21.2) + jwt (3.2.0) + base64 + kaminari (1.2.2) + activesupport (>= 4.1.0) + kaminari-actionview (= 1.2.2) + kaminari-activerecord (= 1.2.2) + kaminari-core (= 1.2.2) + kaminari-actionview (1.2.2) + actionview + kaminari-core (= 1.2.2) + kaminari-activerecord (1.2.2) + activerecord + kaminari-core (= 1.2.2) + kaminari-core (1.2.2) + kaminari-i18n (0.5.0) + kaminari + rails + kaminari-mongoid (1.0.2) + kaminari-core (~> 1.0) + mongoid + language_server-protocol (3.17.0.6) + launchy (3.1.1) + addressable (~> 2.8) + childprocess (~> 5.0) + logger (~> 1.6) + lint_roller (1.1.0) + listen (3.10.0) + logger + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + loofah (2.25.2) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + mail (2.9.1) + logger + mini_mime (>= 0.1.1) + net-imap + net-pop + net-smtp + marcel (1.2.1) + matrix (0.4.3) + method_source (1.1.0) + mini_mime (1.1.5) + mini_portile2 (2.8.9) + minitest (6.0.6) + drb (~> 2.0) + prism (~> 1.5) + mongo (2.26.0) + base64 + bson (>= 4.14.1, < 6.0.0) + mongoid (9.1.1) + activemodel (>= 5.1, < 8.2, != 7.0.0) + concurrent-ruby (>= 1.0.5, < 2.0) + mongo (>= 2.18.0, < 3.0.0) + ostruct + mongoid-compatibility (1.0.0) + activesupport + mongoid (>= 2.0) + mongoid-rspec (4.2.0) + mongoid (>= 3.0, < 10.0) + mongoid-compatibility (>= 0.5.1) + msgpack (1.8.5) + multi_xml (0.9.1) + bigdecimal (>= 3.1, < 5) + net-http (0.9.1) + uri (>= 0.11.1) + net-imap (0.6.7) + date + net-protocol + net-pop (0.1.2) + net-protocol + net-protocol (0.4.0) + timeout + net-smtp (0.5.1) + net-protocol + nio4r (2.7.5) + nokogiri (1.19.4) + mini_portile2 (~> 2.8.2) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) + oauth2 (2.0.25) + anonymous_loader (~> 0.1, >= 0.1.3) + auth-sanitizer (~> 0.2, >= 0.2.3) + faraday (>= 0.17.3, < 4.0) + jwt (>= 1.0, < 4.0) + logger (~> 1.2) + multi_xml (~> 0.5) + rack (>= 1.2, < 4) + snaky_hash (~> 2.0, >= 2.0.7) + version_gem (~> 1.1, >= 1.1.14) + octokit (10.0.0) + faraday (>= 1, < 3) + sawyer (~> 0.9) + omniauth (2.1.4) + hashie (>= 3.4.6) + logger + rack (>= 2.2.3) + rack-protection + omniauth-github (2.0.1) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.8) + omniauth-google-oauth2 (1.2.3) + jwt (>= 2.9.2, < 4) + oauth2 (~> 2.0) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.8) + omniauth-oauth2 (1.9.0) + oauth2 (>= 2.0.2, < 3) + omniauth (~> 2.0) + omniauth-rails_csrf_protection (2.0.1) + actionpack (>= 4.2) + omniauth (~> 2.0) + optimist (3.2.1) + orm_adapter (0.5.0) + ostruct (0.6.3) + parallel (2.2.0) + parser (3.3.12.0) + ast (~> 2.4.1) + racc + patience_diff (1.2.0) + optimist (~> 3.0) + pjax_rails (0.5.1) jquery-rails - polyglot (0.3.3) - premailer (1.7.3) - css_parser (>= 1.1.9) + railties (>= 4.0) + pp (0.6.4) + prettyprint + premailer (1.31.0) + addressable + css_parser (>= 1.19.0) htmlentities (>= 4.0.0) - pry (0.9.12.2) - coderay (~> 1.0.5) - method_source (~> 0.8) - slop (~> 3.4) - pry-rails (0.3.2) - pry (>= 0.9.10) - puma (2.6.0) - rack (>= 1.1, < 2.0) - quiet_assets (1.0.2) - railties (>= 3.1, < 5.0) - rack (1.4.5) - rack-cache (1.2) - rack (>= 0.4) - rack-contrib (1.1.0) - rack (>= 0.9.1) - rack-ssl (1.3.3) - rack - rack-ssl-enforcer (0.2.6) - rack-test (0.6.2) - rack (>= 1.0) - rails (3.2.14) - actionmailer (= 3.2.14) - actionpack (= 3.2.14) - activerecord (= 3.2.14) - activeresource (= 3.2.14) - activesupport (= 3.2.14) - bundler (~> 1.0) - railties (= 3.2.14) - rails_autolink (1.1.4) - rails (> 3.1) - railties (3.2.14) - actionpack (= 3.2.14) - activesupport (= 3.2.14) - rack-ssl (~> 1.3.2) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (>= 0.14.6, < 2.0) - raindrops (0.12.0) - rake (10.1.0) - rbx-require-relative (0.0.9) - rdoc (3.12.2) - json (~> 1.4) - ref (1.0.5) - rest-client (1.6.7) - mime-types (>= 1.16) - ri_cal (0.8.8) - rspec (2.14.1) - rspec-core (~> 2.14.0) - rspec-expectations (~> 2.14.0) - rspec-mocks (~> 2.14.0) - rspec-core (2.14.5) - rspec-expectations (2.14.3) - diff-lcs (>= 1.1.3, < 2.0) - rspec-mocks (2.14.3) - rspec-rails (2.14.0) - actionpack (>= 3.0) - activesupport (>= 3.0) - railties (>= 3.0) - rspec-core (~> 2.14.0) - rspec-expectations (~> 2.14.0) - rspec-mocks (~> 2.14.0) - ruby-debug (0.10.4) - columnize (>= 0.1) - ruby-debug-base (~> 0.10.4.0) - ruby-debug-base (0.10.4) - linecache (>= 0.3) - ruby-fogbugz (0.1.1) - crack - rushover (0.3.0) + prettyprint (0.2.0) + prism (1.9.0) + pry (0.16.0) + coderay (~> 1.1) + method_source (~> 1.0) + reline (>= 0.6.0) + pry-rails (0.3.11) + pry (>= 0.13.0) + public_suffix (7.0.5) + puma (8.0.2) + nio4r (~> 2.0) + pundit (2.5.2) + activesupport (>= 3.0.0) + pundit-matchers (4.0.0) + rspec-core (~> 3.12) + rspec-expectations (~> 3.12) + rspec-mocks (~> 3.12) + rspec-support (~> 3.12) + pushover2 (0.1.0) json - rest-client - safe_yaml (0.9.7) - simple_oauth (0.2.0) - simplecov (0.7.1) - multi_json (~> 1.0) - simplecov-html (~> 0.7.1) - simplecov-html (0.7.1) - slop (3.4.6) - sprockets (2.2.2) - hike (~> 1.2) - multi_json (~> 1.0) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - strong_parameters (0.2.1) - actionpack (~> 3.0) - activemodel (~> 3.0) - railties (~> 3.0) - taskmapper (1.0.1) - activeresource (~> 3.0) - activesupport (~> 3.0) - hashie (~> 2.0) - taskmapper-unfuddle (0.8.0) - addressable - taskmapper - term-ansicolor (1.2.2) - tins (~> 0.8) - therubyracer (0.12.0) - libv8 (~> 3.16.14.0) - ref - thor (0.18.1) - thread_safe (0.1.3) - atomic - tilt (1.4.1) - timecop (0.6.3) - tins (0.11.0) - treetop (1.4.15) - polyglot - polyglot (>= 0.3.1) - turbo-sprockets-rails3 (0.3.10) - railties (> 3.2.8, < 4.0.0) - sprockets (>= 2.0.0) - tzinfo (0.3.37) - uglifier (2.2.1) - execjs (>= 0.3.0) - multi_json (~> 1.0, >= 1.0.2) - underscore-rails (1.5.1) - unicorn (4.6.3) - kgio (~> 2.6) - rack - raindrops (~> 0.7) - useragent (0.7.0) - warden (1.2.3) - rack (>= 1.0) - webmock (1.13.0) - addressable (>= 2.2.7) + net-http + uri + racc (1.8.1) + rack (3.2.7) + rack-protection (4.2.1) + base64 (>= 0.1.0) + logger (>= 1.6.0) + rack (>= 3.0.0, < 4) + rack-session (2.1.2) + base64 (>= 0.1.0) + rack (>= 3.0.0) + rack-test (2.2.0) + rack (>= 1.3) + rack-timeout (0.7.0) + rackup (2.3.1) + rack (>= 3) + rails (8.1.4) + actioncable (= 8.1.4) + actionmailbox (= 8.1.4) + actionmailer (= 8.1.4) + actionpack (= 8.1.4) + actiontext (= 8.1.4) + actionview (= 8.1.4) + activejob (= 8.1.4) + activemodel (= 8.1.4) + activerecord (= 8.1.4) + activestorage (= 8.1.4) + activesupport (= 8.1.4) + bundler (>= 1.15.0) + railties (= 8.1.4) + rails-controller-testing (1.0.5) + actionpack (>= 5.0.1.rc1) + actionview (>= 5.0.1.rc1) + activesupport (>= 5.0.1.rc1) + rails-dom-testing (2.3.0) + activesupport (>= 5.0.0) + minitest + nokogiri (>= 1.6) + rails-html-sanitizer (1.7.1) + loofah (~> 2.25, >= 2.25.2) + nokogiri (>= 1.15.7, != 1.16.7, != 1.16.6, != 1.16.5, != 1.16.4, != 1.16.3, != 1.16.2, != 1.16.1, != 1.16.0.rc1, != 1.16.0) + rails-i18n (8.1.0) + i18n (>= 0.7, < 2) + railties (>= 8.0.0, < 9) + rails_autolink (1.1.8) + actionview (> 3.1) + activesupport (> 3.1) + railties (> 3.1) + railties (8.1.4) + actionpack (= 8.1.4) + activesupport (= 8.1.4) + irb (~> 1.13) + rackup (>= 1.0.0) + rake (>= 12.2) + thor (~> 1.0, >= 1.2.2) + tsort (>= 0.2) + zeitwerk (~> 2.6) + rainbow (3.1.1) + rake (13.4.2) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rbs (4.2.0) + logger + prism (>= 1.6.0) + tsort + rbtree3 (0.7.1) + rdoc (8.1.0) + erb + prism (>= 1.6.0) + rbs (>= 4.0.0) + tsort + regexp_parser (2.13.1) + reline (0.7.0) + io-console (~> 0.5) + request_store (1.7.0) + rack (>= 1.4) + responders (3.2.1) + actionpack (>= 7.0) + railties (>= 7.0) + rexml (3.4.4) + rspec-activemodel-mocks (1.3.0) + activemodel (>= 3.0) + activesupport (>= 3.0) + rspec-mocks (>= 2.99, < 4.0) + rspec-core (3.13.6) + rspec-support (~> 3.13.0) + rspec-expectations (3.13.5) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-mocks (3.13.8) + diff-lcs (>= 1.2.0, < 2.0) + rspec-support (~> 3.13.0) + rspec-rails (8.0.4) + actionpack (>= 7.2) + activesupport (>= 7.2) + railties (>= 7.2) + rspec-core (>= 3.13.0, < 5.0.0) + rspec-expectations (>= 3.13.0, < 5.0.0) + rspec-mocks (>= 3.13.0, < 5.0.0) + rspec-support (>= 3.13.0, < 5.0.0) + rspec-rebound (0.2.1) + rspec-core (~> 3.3) + rspec-support (3.13.7) + rubocop (1.88.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) + parallel (>= 1.10) + parser (>= 3.3.0.2) + rainbow (>= 2.2.2, < 4.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.49.0, < 2.0) + ruby-progressbar (~> 1.7) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.50.0) + parser (>= 3.3.7.2) + prism (~> 1.7) + rubocop-capybara (3.0.0) + lint_roller (~> 1.1) + rubocop (~> 1.81) + rubocop-disable_syntax (0.2.0) + lint_roller + rubocop (>= 1.72.0) + rubocop-erb (0.7.1) + herb (~> 0.7) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-factory_bot (2.28.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-performance (1.26.1) + lint_roller (~> 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.47.1, < 2.0) + rubocop-rails (2.36.0) + activesupport (>= 4.2.0) + lint_roller (~> 1.1) + rack (>= 1.1) + rubocop (>= 1.75.0, < 2.0) + rubocop-ast (>= 1.44.0, < 2.0) + rubocop-rake (0.7.1) + lint_roller (~> 1.1) + rubocop (>= 1.72.1) + rubocop-rspec (3.10.2) + lint_roller (~> 1.1) + regexp_parser (>= 2.0) + rubocop (~> 1.86, >= 1.86.2) + rubocop-rspec_rails (2.32.0) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-rspec (~> 3.5) + rubocop-thread_safety (0.7.3) + lint_roller (~> 1.1) + rubocop (~> 1.72, >= 1.72.1) + rubocop-ast (>= 1.44.0, < 2.0) + ruby-progressbar (1.13.0) + ruby2_keywords (0.0.5) + rubydex (0.4.1) + rubydex (0.4.1-aarch64-linux) + rubydex (0.4.1-arm64-darwin) + rubydex (0.4.1-x86_64-darwin) + rubydex (0.4.1-x86_64-linux) + rubyzip (3.7.0) + sawyer (0.9.3) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + securerandom (0.4.1) + selenium-webdriver (4.49.0) + base64 (~> 0.2) + logger (~> 1.4) + rexml (~> 3.2, >= 3.2.5) + rubyzip (>= 1.2.2, < 4.0) + websocket (~> 1.0) + simplecov (1.3.1) + snaky_hash (2.0.7) + hashie (>= 0.1.0, < 6) + version_gem (~> 1.1, >= 1.1.14) + sprockets (4.4.1) + concurrent-ruby (~> 1.1) + logger + rack (>= 2.2.4, < 4) + sprockets-rails (3.5.2) + actionpack (>= 6.1) + activesupport (>= 6.1) + sprockets (>= 3.0.0) + ssrf_filter (1.6.0) + standard (1.56.0) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.88.0) + standard-custom (~> 1.0.0) + standard-performance (~> 1.8) + standard-custom (1.0.2) + lint_roller (~> 1.0) + rubocop (~> 1.50) + standard-performance (1.9.0) + lint_roller (~> 1.1) + rubocop-performance (~> 1.26.0) + stimulus-rails (1.3.4) + railties (>= 6.0.0) + super_diff (0.19.0) + attr_extras (>= 6.2.4, < 8) + diff-lcs (~> 1.5) + patience_diff (~> 1.2) + thor (1.5.0) + thruster (0.1.26) + thruster (0.1.26-aarch64-linux) + thruster (0.1.26-arm64-darwin) + thruster (0.1.26-x86_64-darwin) + thruster (0.1.26-x86_64-linux) + timeout (0.6.1) + tsort (0.2.0) + turbo-rails (2.0.23) + actionpack (>= 7.1.0) + railties (>= 7.1.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + underscore-rails (1.8.3) + unicode-display_width (3.3.0) + unicode-emoji (~> 4.3) + unicode-emoji (4.3.0) + uri (1.1.1) + useragent (0.16.11) + vcr (6.4.0) + version_gem (1.1.15) + warden (1.2.9) + rack (>= 2.0.9) + webmock (3.26.4) + addressable (>= 2.8.0) crack (>= 0.3.2) - xmpp4r (0.5) - xpath (2.0.0) - nokogiri (~> 1.3) - yajl-ruby (1.1.0) + hashdiff (>= 0.4.0, < 2.0.0) + websocket (1.2.11) + websocket-driver (0.8.2) + base64 + websocket-extensions (>= 0.1.0) + websocket-extensions (0.1.5) + xpath (3.2.0) + nokogiri (~> 1.8) + zeitwerk (2.8.3) PLATFORMS + aarch64-linux + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-musl + arm64-darwin ruby + x86-linux-gnu + x86-linux-musl + x86_64-darwin + x86_64-linux + x86_64-linux-gnu + x86_64-linux-musl DEPENDENCIES - actionmailer (~> 3.2.14) actionmailer_inline_css - actionpack (~> 3.2.14) + activemodel-serializers-xml airbrake - better_errors - binding_of_caller - bitbucket_rest_api + bootsnap (>= 1.4.4) + brakeman + bundler-audit campy - capistrano capybara - coveralls - database_cleaner - debugger decent_exposure devise + devise-i18n + dotenv + draper email_spec - execjs - fabrication - flowdock - foreman - gitlab! - haml - hipchat + errbit_github_plugin + errbit_plugin + factory_bot_rails + faker + faraday-retry + font-awesome-rails + herb hoi - hoptoad_notifier (~> 2.4) htmlentities httparty - jira-ruby - jquery-rails (~> 2.1.4) - kaminari (>= 0.14.1) + icalendar + importmap-rails + inline_svg + jquery-rails + json + kaminari + kaminari-i18n + kaminari-mongoid launchy - lighthouse-api - meta_request + listen (~> 3.10) mongoid mongoid-rspec - mongoid_rails_migrations - octokit (~> 1.18) + nokogiri + octokit + omniauth omniauth-github - oruen_redmine_client - pivotal-tracker + omniauth-google-oauth2 + omniauth-rails_csrf_protection + ostruct pjax_rails pry-rails puma - quiet_assets - rack-ssl - rack-ssl-enforcer + pundit + pundit-matchers + pushover2 + rack-timeout + rails (= 8.1.4) + rails-controller-testing + rails-i18n rails_autolink - railties (~> 3.2.14) - ri_cal - rspec-rails (~> 2.6) - ruby-debug - ruby-fogbugz - rushover - strong_parameters - taskmapper - taskmapper-unfuddle - therubyracer - timecop - turbo-sprockets-rails3 - uglifier (>= 1.0.3) + rspec-activemodel-mocks + rspec-rails + rspec-rebound + rubocop + rubocop-capybara + rubocop-disable_syntax + rubocop-erb + rubocop-factory_bot + rubocop-performance + rubocop-rails + rubocop-rake + rubocop-rspec + rubocop-rspec_rails + rubocop-thread_safety + rubydex + securerandom + selenium-webdriver + simplecov + sprockets-rails + standard (= 1.56.0) + stimulus-rails + super_diff + thruster + turbo-rails underscore-rails - unicorn + uri useragent + vcr webmock - xmpp4r - yajl-ruby + +CHECKSUMS + action_text-trix (2.1.19) sha256=7012f59421009cf284aa651294896414d653a61a2417c9b8714c8476d2f74009 + actioncable (8.1.4) sha256=cfcd72f8c861e01ccdc96d772ad8c5ad6ed0ea7c571aef81a794b6027eaa7f11 + actionmailbox (8.1.4) sha256=9c4525e577ebb671ce558f3ea78b8a634f64e56a0e6e8d105b28b873793a06eb + actionmailer (8.1.4) sha256=f82d95d6762ae46ea38f221d3363639266af4f8e56d50e2bd367558674baf093 + actionmailer_inline_css (1.6.0) sha256=b763306c37bf79f9e46b67b5e3cca261b42a0457f0fb05ca1b850f9aef0f5450 + actionpack (8.1.4) sha256=245493cc51be195a7645e6fc184880fa7e5b32ff1a08e053ee31f58c76e30ea4 + actiontext (8.1.4) sha256=33ee99bea7da6af911fc7d98b17013a8e1ec62aa01b20b20e9a5366f40dbf644 + actionview (8.1.4) sha256=eff1efd07c4d969abad288322b423bcb67fdbab5e324c91ca37352b80f226076 + activejob (8.1.4) sha256=4ed5b2ed8d4cc5c8f5f09becfef8346f202a4884eee0c8c73cae5ac378824099 + activemodel (8.1.4) sha256=9a0906c127bd118aa5f06157db12b8f750da83dccee72db2f658547a0ae7a0e8 + activemodel-serializers-xml (1.0.3) sha256=fa1b16305e7254cc58a59c68833e3c0a593a59c8ab95d3be5aaea7cd9416c397 + activerecord (8.1.4) sha256=3b4957ea7f246c9231bd7faa909312eac03a9101aaf87977b6c52733ff00b04f + activestorage (8.1.4) sha256=f4956f3ec9ee63e5e0b332b57c877cb627f82b56f4cc902279310d2aa285c7a8 + activesupport (8.1.4) sha256=891dd3fe43c4fc8391934b237b1189bb1f661c932a84a840043db9d46a4e80df + addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af + airbrake (13.0.5) sha256=901f5074c25d5ef77ed87f5bde7a28400a7324f5d7013a8a12d07e0099cc31b6 + airbrake-ruby (6.2.2) sha256=293e34fb36e763e1b6d67ab584cce7c5b6fe9eea1a70c26d8c13c0f5d7de2fbc + anonymous_loader (0.1.3) sha256=084a18e2439144d955447dc11dfc982f41fcd1583ad32d4d55151325dc44cb55 + ast (2.4.3) sha256=954615157c1d6a382bc27d690d973195e79db7f55e9765ac7c481c60bdb4d383 + attr_extras (7.1.0) sha256=d96fc9a9dd5d85ba2d37762440a816f840093959ae26bb90da994c2d9f1fc827 + auth-sanitizer (0.2.3) sha256=db10aac92cfbe4c64ab637eebcbe1d67395d1694798041362173370f59933e3c + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + bcrypt (3.1.22) sha256=1f0072e88c2d705d94aff7f2c5cb02eb3f1ec4b8368671e19112527489f29032 + bigdecimal (4.1.3) sha256=61ebe1e5e559bdc3cc6f2c0ee7f427321fc838f59611c294356eb04d6e21cf66 + bootsnap (1.26.0) sha256=ca96237015e6cd74a02963d5821cf00ac5ea134653b323e8cd6d702a7718bf1b + brakeman (8.0.6) sha256=759cc69341115e6c2dcd47b6fd8649a0b9bd540e3585ac8a0a94e31c66fee386 + bson (5.2.0) sha256=c468c1e8a3cfa1e80531cc519a890f85586986721d8e305f83465cc36bb82608 + builder (3.3.0) sha256=497918d2f9dca528fdca4b88d84e4ef4387256d984b8154e9d5d3fe5a9c8835f + bundler (4.0.22) sha256=d8d5ec84c8555e0af71db63ed7aee4d1a8fb839ec46d84212d61979242a5d75a + bundler-audit (0.9.3) sha256=81c8766c71e47d0d28a0f98c7eed028539f21a6ea3cd8f685eb6f42333c9b4e9 + campy (1.0.0) sha256=fc353b535c448afad5acfc972264b609a9a461335b09cda151d3e7bbf9504ef6 + capybara (3.40.0) sha256=42dba720578ea1ca65fd7a41d163dd368502c191804558f6e0f71b391054aeef + childprocess (5.1.0) sha256=9a8d484be2fd4096a0e90a0cd3e449a05bc3aa33f8ac9e4d6dcef6ac1455b6ec + coderay (1.1.3) sha256=dc530018a4684512f8f38143cd2a096c9f02a1fc2459edcfe534787a7fc77d4b + concurrent-ruby (1.3.8) sha256=b2f1be836e968ccc78ccfce277ea79c72a88633f22306782c16ff23fb415d1e1 + connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a + crack (1.0.1) sha256=ff4a10390cd31d66440b7524eb1841874db86201d5b70032028553130b6d4c7e + crass (1.0.7) sha256=94868719948664c89ddcaf0a37c65048413dfcb1c869470a5f7a7ceb5390b295 + css_parser (3.2.0) sha256=e2d9d76164246d4d5d0b96e22fcbf581e1c65368ec3e52e056d4154e42eaac65 + csv (3.3.6) sha256=aba61e7e507a66f03d45cb1f3c4b6359861c3504038b422962875dce099e4456 + date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0 + decent_exposure (3.0.4) sha256=5ce9e3df24f8d77f094b2e612d1c43a78a2de879847ccbb57c0e596e6c303cf1 + devise (5.0.4) sha256=d605f2b85854e74e56ee789e2d398702bc2d06e6bcd894717a670a3199c74cc1 + devise-i18n (1.16.1) sha256=66321fa28111a78de25cbd7d4b5e7edcf67d3b73a419a8df563365849f68b2ba + diff-lcs (1.6.2) sha256=9ae0d2cba7d4df3075fe8cd8602a8604993efc0dfa934cff568969efb1909962 + dotenv (3.2.0) sha256=e375b83121ea7ca4ce20f214740076129ab8514cd81378161f11c03853fe619d + draper (4.0.6) sha256=e96990bffd4d98806913972f5ae2e6a7e8a5fb5433f17b80fbed7ba99d3c9236 + drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373 + email_spec (2.3.1) sha256=5e8891319427fd6de0f3883dffe3c2ac4f5434359a33ed9c48e6d68e9f712f1b + erb (6.0.7) sha256=c5ca6dc25b0ef974a44dc8f59fe847577122483b1968a38dec305c60bf91ee92 + errbit_github_plugin (0.5.0) sha256=58db10fbc1012e2b71209e2d5928b3405560b8b6733b9562870c6a9079e0a42a + errbit_plugin (0.8.0) sha256=dfd883a4f0e55b5742cb839b0f623ac6188e52e7424f4a5f19aa11a136b09846 + erubi (1.13.1) sha256=a082103b0885dbc5ecf1172fede897f9ebdb745a4b97a5e8dc63953db1ee4ad9 + factory_bot (6.6.0) sha256=1fc1b3b5620ec980a6a27aec1b6ec8c250ca82962e970e8a40f93e8d388d4b89 + factory_bot_rails (6.5.1) sha256=d3cc4851eae4dea8a665ec4a4516895045e710554d2b5ac9e68b94d351bc6d68 + faker (3.8.0) sha256=c147b308df73a90f27a4fc84f18d4c22ef0ad9c2a64b2b61c86fd0ca71753efc + faraday (2.14.4) sha256=9bb4408c44621b0dbaaaa39e5dbfc4dbe58cc6751b6eb94d16ae9e1f2f2fab6e + faraday-net_http (3.4.4) sha256=0e78af151747ed1b00f33e25973b4bc220d7f16c00c39676817c8b12331eb588 + faraday-retry (2.4.0) sha256=7b79c48fb7e56526faf247b12d94a680071ff40c9fda7cf1ec1549439ad11ebe + ffi (1.17.4) sha256=bcd1642e06f0d16fc9e09ac6d49c3a7298b9789bcb58127302f934e437d60acf + ffi (1.17.4-aarch64-linux-gnu) sha256=b208f06f91ffd8f5e1193da3cae3d2ccfc27fc36fba577baf698d26d91c080df + ffi (1.17.4-aarch64-linux-musl) sha256=9286b7a615f2676245283aef0a0a3b475ae3aae2bb5448baace630bb77b91f39 + ffi (1.17.4-arm-linux-gnu) sha256=d6dbddf7cb77bf955411af5f187a65b8cd378cb003c15c05697f5feee1cb1564 + ffi (1.17.4-arm-linux-musl) sha256=9d4838ded0465bef6e2426935f6bcc93134b6616785a84ffd2a3d82bc3cf6f95 + ffi (1.17.4-arm64-darwin) sha256=19071aaf1419251b0a46852abf960e77330a3b334d13a4ab51d58b31a937001b + ffi (1.17.4-x86-linux-gnu) sha256=38e150df5f4ca555e25beca4090823ae09657bceded154e3c52f8631c1ed72cf + ffi (1.17.4-x86-linux-musl) sha256=fbeec0fc7c795bcf86f623bb18d31ea1820f7bd580e1703a3d3740d527437809 + ffi (1.17.4-x86_64-darwin) sha256=aa70390523cf3235096cf64962b709b4cfbd5c082a2cb2ae714eb0fe2ccda496 + ffi (1.17.4-x86_64-linux-gnu) sha256=9d3db14c2eae074b382fa9c083fe95aec6e0a1451da249eab096c34002bc752d + ffi (1.17.4-x86_64-linux-musl) sha256=3fdf9888483de005f8ef8d1cf2d3b20d86626af206cbf780f6a6a12439a9c49e + font-awesome-rails (4.7.0.9) sha256=b45044908fbf3178b8d84fbae415dae4b9bf847612bcb1170d88ed13842c8732 + globalid (1.4.0) sha256=037f12fbf1d9d7a014d501c2d5c77356fd4ddd96d7a7991d6700bba96706f427 + hashdiff (1.2.1) sha256=9c079dbc513dfc8833ab59c0c2d8f230fa28499cc5efb4b8dd276cf931457cd1 + hashie (5.1.0) sha256=c266471896f323c446ea8207f8ffac985d2718df0a0ba98651a3057096ca3870 + herb (0.11.0) sha256=cba4bfc57f7c1f4b3ee2f4ed02d966d121ce9d8649b087c721d4f9c61f7c63e2 + herb (0.11.0-aarch64-linux-gnu) sha256=7d8244655bb99a50b2d52ea13408c2a76b3fbd70bcca8ccee4229d3e1902bb0b + herb (0.11.0-aarch64-linux-musl) sha256=8b19e8ce70cae1a016468cd6c3a88a051e47fd68f3f8b1bd3ffb751a62109982 + herb (0.11.0-arm-linux-gnu) sha256=8fd8e3c4d45c3b6bc8a2b7f056ac4bf961cfb03407fef26f7e1d5ef69406bf5d + herb (0.11.0-arm-linux-musl) sha256=0ac4e441389d8e67ef1afcabdb1bff94f5b7cd1c2811159647f61fc7bc241f8d + herb (0.11.0-arm64-darwin) sha256=8972ac3e5a7ee7296a89d78fceb40d8fb85c3ea8d40c9781a9c8db3e58194501 + herb (0.11.0-x86-linux-gnu) sha256=3059da43892860326523d40fdf22b10f5c1c676241b1bfa849dbaebe33dede01 + herb (0.11.0-x86-linux-musl) sha256=50d0768f16e998375fd6fa3133156a4c47f2b7cb7b196564ac836478c6cfb14b + herb (0.11.0-x86_64-darwin) sha256=2eb9db026a1949cb2ad8cfa1944ef8402feab784c7d37a35c48575a9e0d79912 + herb (0.11.0-x86_64-linux-gnu) sha256=aba19094bc1618e1bc0fb59db52ba251c93a24598f5228815616b282f10bb8a0 + herb (0.11.0-x86_64-linux-musl) sha256=e27a08fe72304c8043e851b568ed30eaa45f06b5333d151939a7834e936c01aa + hoi (0.0.7) sha256=bbea294ad76f08fcc6931f17e689ab3342cb09d73472fd5f7f1a1744af5f836d + htmlentities (4.4.2) sha256=bbafbdf69f2eca9262be4efef7e43e6a1de54c95eb600f26984f71d2fe96c5c3 + httparty (0.24.2) sha256=8fca6a54aa0c4aa4303a0fd33e5e2156175d6a5334f714263b458abd7fda9c38 + i18n (1.15.2) sha256=00f9eb62412fe593b2a65a97daa75300d37abb8f7202ec748e94b6d46a9dd1b5 + icalendar (2.12.5) sha256=bda963d46bb08d9de1366eff05308c1e60a178532422fcc11d60360f84f58156 + ice_cube (0.17.0) sha256=32deb45dda4b4acc53505c2f581f6d32b5afc04d29b9004769944a0df5a5fcbe + importmap-rails (2.2.3) sha256=7101be2a4dc97cf1558fb8f573a718404c5f6bcfe94f304bf1f39e444feeb16a + inline_svg (1.10.0) sha256=5b652934236fd9f8adc61f3fd6e208b7ca3282698b19f28659971da84bf9a10f + io-console (0.9.4) sha256=a403304f32928ee85e56d457b4612ca43f2703b561a3258844992bd24085fbb1 + irb (1.18.0) sha256=de9454a0703a54704b9811a5ef31a60c86949fbf4013fcf244fabc7c775248e3 + jquery-rails (4.6.1) sha256=619f3496cdcdeaae1fd6dafa52dbac3fc45b745d4e09712da4184a16b3a8d9c0 + json (2.21.2) sha256=1f1d3b7cf2b3ba1a69beca0bb6db13d5438b80bff3cd54cdaaa620b9b07c1c6a + jwt (3.2.0) sha256=5419b1fe37b1da0982bd07051f573a8b8789ab724c2aa7e785e4784a3ed217d7 + kaminari (1.2.2) sha256=c4076ff9adccc6109408333f87b5c4abbda5e39dc464bd4c66d06d9f73442a3e + kaminari-actionview (1.2.2) sha256=1330f6fc8b59a4a4ef6a549ff8a224797289ebf7a3a503e8c1652535287cc909 + kaminari-activerecord (1.2.2) sha256=0dd3a67bab356a356f36b3b7236bcb81cef313095365befe8e98057dd2472430 + kaminari-core (1.2.2) sha256=3bd26fec7370645af40ca73b9426a448d09b8a8ba7afa9ba3c3e0d39cdbb83ff + kaminari-i18n (0.5.0) sha256=f20efcd31370f07eb423defdb296b8e05e48c8bc897655c636bc1b69b0fbe252 + kaminari-mongoid (1.0.2) sha256=7d28be9a8322d82bca36e6b4983f2f91e1149eee84755b52ce26c0cd0f040ebc + language_server-protocol (3.17.0.6) sha256=5ef2c0c138f8267e1bc631d3328347d354f96724b0af22f2c79516120443b7f0 + launchy (3.1.1) sha256=72b847b5cc961589dde2c395af0108c86ff0119f42d4648d25b5440ebb10059e + lint_roller (1.1.0) sha256=2c0c845b632a7d172cb849cc90c1bce937a28c5c8ccccb50dfd46a485003cc87 + listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + loofah (2.25.2) sha256=2007f746959ac65552456e04b433e83deb22759ab38c838b4445c70e43425918 + mail (2.9.1) sha256=06574eca475253d6c18145dd70af80d0eb970182d55053497c5f4d797ea160e8 + marcel (1.2.1) sha256=1678e9360e32f9eafa917c80029e2f6d10b2715c66a4b87b6d0da9b9cd1f859f + matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b + method_source (1.1.0) sha256=181301c9c45b731b4769bc81e8860e72f9161ad7d66dd99103c9ab84f560f5c5 + mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef + mini_portile2 (2.8.9) sha256=0cd7c7f824e010c072e33f68bc02d85a00aeb6fce05bb4819c03dfd3c140c289 + minitest (6.0.6) sha256=153ea36d1d987a62942382b61075745042a2b3123b1cd48f4c3675af9cc7d6f1 + mongo (2.26.0) sha256=e93190d0c184b5c14858e4239a61fe255b2eae86e04bf9590afb962b85a5fa5d + mongoid (9.1.1) sha256=eaf0e14f34374fd7b8cb041e913d4c60daa66e1b841188f4635296bcdb2e3337 + mongoid-compatibility (1.0.0) sha256=08e5770d102258a3b8f39443057de42cde61d465980f182954b1b70d965465e8 + mongoid-rspec (4.2.0) sha256=0811fccdc6dcca21987486208a0f614cc395620ccb7ce884b9bce0b5a677ecc8 + msgpack (1.8.5) sha256=97419eaa7b35dfe3e462c0e6c1a3dfdcbfc8756605c09e46e4c6daef127517ba + multi_xml (0.9.1) sha256=7ce766b59c17241ed62976caeae1fae9b2431b263398c35396239a68c4a64e57 + net-http (0.9.1) sha256=25ba0b67c63e89df626ed8fac771d0ad24ad151a858af2cc8e6a716ca4336996 + net-imap (0.6.7) sha256=b5c9573be975d856de252ee851871724da66aa2d449b2482d5690bd12bc23660 + net-pop (0.1.2) sha256=848b4e982013c15b2f0382792268763b748cce91c9e91e36b0f27ed26420dff3 + net-protocol (0.4.0) sha256=f9f90c8c6f64794a45160bf422177a336db12809de3beeeaa26b88fcd2e8c853 + net-smtp (0.5.1) sha256=ed96a0af63c524fceb4b29b0d352195c30d82dd916a42f03c62a3a70e5b70736 + nio4r (2.7.5) sha256=6c90168e48fb5f8e768419c93abb94ba2b892a1d0602cb06eef16d8b7df1dca1 + nokogiri (1.19.4) sha256=50c951611c92bca05c51411aef45f1cbc50f2821c4802758c5c6d34696533ab5 + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm-linux-gnu) sha256=a301313e38bb065d68239e79734bcd6f56fb6efaacebde29e9abf2a4735340ca + nokogiri (1.19.4-arm-linux-musl) sha256=588923c101bcfa78869734d247d25b598674323e7f22474fc468f6e5647311eb + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 + nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b + oauth2 (2.0.25) sha256=2f736a2f93c2caa67c1b08dc3c9889bb907d62643f3183fefaa1723cba6a82ac + octokit (10.0.0) sha256=82e99a539b7637b7e905e6d277bb0c1a4bed56735935cc33db6da7eae49a24e8 + omniauth (2.1.4) sha256=42a05b0496f0d22e1dd85d42aaf602f064e36bb47a6826a27ab55e5ba608763c + omniauth-github (2.0.1) sha256=8ff8e70ac6d6db9d52485eef52cfa894938c941496e66b52b5e2773ade3ccad4 + omniauth-google-oauth2 (1.2.3) sha256=bdbab67e64e50b7902eee2dcfc2225575cefba15ab89a3b6e92c8947987c1da9 + omniauth-oauth2 (1.9.0) sha256=ed15f6d9d20991807ce114cc5b9c1453bce3645b64e51c68c90cff5ff153fee8 + omniauth-rails_csrf_protection (2.0.1) sha256=c6e3204d7e3925bb537cb52d50fdfc9f05293f1a9d87c5d4ab4ca3a39ba8c32d + optimist (3.2.1) sha256=8cf8a0fd69f3aa24ab48885d3a666717c27bc3d9edd6e976e18b9d771e72e34e + orm_adapter (0.5.0) sha256=aa5d0be5d540cbb46d3a93e88061f4ece6a25f6e97d6a47122beb84fe595e9b9 + ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 + parallel (2.2.0) sha256=e1059c5fd7b649558a0aec38a769f06a42942bdb40503d005a59c352fe011cd8 + parser (3.3.12.0) sha256=21a6d7f755d5a24dfbdc6e6b772e4e879a52e7631a88bc5a3a134606052c9828 + patience_diff (1.2.0) sha256=f492094486af02fff4a80070fa6b4d0ebbcf4d42fb38bba29d095eef43f6822c + pjax_rails (0.5.1) sha256=3cb4b53d874de1349014aaae2cb879c8924ec86d68f3054a0d958c995b0c8ddb + pp (0.6.4) sha256=dfcb0fce700c41456265922884f9fe195d7fbb0674a3578e6c0f69588e82b570 + premailer (1.31.0) sha256=79653fb7920081a5d8e55f25b82838e88f5a385dadee643e2b50a87d88fee273 + prettyprint (0.2.0) sha256=2bc9e15581a94742064a3cc8b0fb9d45aae3d03a1baa6ef80922627a0766f193 + prism (1.9.0) sha256=7b530c6a9f92c24300014919c9dcbc055bf4cdf51ec30aed099b06cd6674ef85 + pry (0.16.0) sha256=d76c69065698ed1f85e717bd33d7942c38a50868f6b0673c636192b3d1b6054e + pry-rails (0.3.11) sha256=a69e28e24a34d75d1f60bcf241192a54253f8f7ef8a62cba1e75750a9653593d + public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 + puma (8.0.2) sha256=c8ed871dfbbe66448ea9ffd46692342d9804d4071522b52b5331b7b6e7b686fb + pundit (2.5.2) sha256=e374152baa24f90b630428293faf4b4c5468fc3cc010165f7d8fcb44ce108bbd + pundit-matchers (4.0.0) sha256=59d6077a1d575ea7cceca3ed73df5257488ee1a111ec707b2a797e76908cffd5 + pushover2 (0.1.0) sha256=8c3d9e3953eb89f0e96b52394a7d8d07401f8b8cfb1fce8a29f751ff3d2afe8f + racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f + rack (3.2.7) sha256=93e13e1c24f93556671d85d2d79fa228c3485815c50d7e2f265b5330c6528fb7 + rack-protection (4.2.1) sha256=cf6e2842df8c55f5e4d1a4be015e603e19e9bc3a7178bae58949ccbb58558bac + rack-session (2.1.2) sha256=595434f8c0c3473ae7d7ac56ecda6cc6dfd9d37c0b2b5255330aa1576967ffe8 + rack-test (2.2.0) sha256=005a36692c306ac0b4a9350355ee080fd09ddef1148a5f8b2ac636c720f5c463 + rack-timeout (0.7.0) sha256=757337e9793cca999bb73a61fe2a7d4280aa9eefbaf787ce3b98d860749c87d9 + rackup (2.3.1) sha256=6c79c26753778e90983761d677a48937ee3192b3ffef6bc963c0950f94688868 + rails (8.1.4) sha256=5f3ecdf9a2a3b79b2e31b8fee3b64a00f7284d76e5631f87d0e58e665911a33b + rails-controller-testing (1.0.5) sha256=741448db59366073e86fc965ba403f881c636b79a2c39a48d0486f2607182e94 + rails-dom-testing (2.3.0) sha256=8acc7953a7b911ca44588bf08737bc16719f431a1cc3091a292bca7317925c1d + rails-html-sanitizer (1.7.1) sha256=e797a7c9b01e567307e317c576b49ab4168017e63eea4dba9ce3cb587e2f22c2 + rails-i18n (8.1.0) sha256=52d5fd6c0abef28d84223cc05647f6ae0fd552637a1ede92deee9545755b6cf3 + rails_autolink (1.1.8) sha256=fbcb9d2e5f2cea9435a32e5f12556c7a9b7ed6867889fb9cf5eac405049bfc3a + railties (8.1.4) sha256=b5e7a8e8984e33114d68af62227971960aae1e6c02bd7c9d826ffad97fff583c + rainbow (3.1.1) sha256=039491aa3a89f42efa1d6dec2fc4e62ede96eb6acd95e52f1ad581182b79bc6a + rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701 + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rbs (4.2.0) sha256=51f7b886dcc05bc09e10b901daa6a81829f6adc03101d6ca9ea4aac6103e0674 + rbtree3 (0.7.1) sha256=ab60ead728a5491b70df4f4065e180b18dbab5319f817ce1dbf5dd906f26d8ba + rdoc (8.1.0) sha256=befc37880a5cfd36dcb176c748b5fd5ee39dd3536a75e81824e4972ce230f60a + regexp_parser (2.13.1) sha256=5aedb6b7c35688f51e86eef17a15374dfd287c83f4ca644b2c5f3ec50a33b44b + reline (0.7.0) sha256=5b012d8e55dbf9d450f12bde2cf7d15ff546ae80b3f8f3b30e570d431815583d + request_store (1.7.0) sha256=e1b75d5346a315f452242a68c937ef8e48b215b9453a77a6c0acdca2934c88cb + responders (3.2.1) sha256=c2772970cbda654c0e772d852e5a851e82cd8e96f5fa958650861ba75b8ffa84 + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rspec-activemodel-mocks (1.3.0) sha256=b51b111b726370a20a2103a8a6851296783a70d2b0bd0287bfa24d293f58d76e + rspec-core (3.13.6) sha256=a8823c6411667b60a8bca135364351dda34cd55e44ff94c4be4633b37d828b2d + rspec-expectations (3.13.5) sha256=33a4d3a1d95060aea4c94e9f237030a8f9eae5615e9bd85718fe3a09e4b58836 + rspec-mocks (3.13.8) sha256=086ad3d3d17533f4237643de0b5c42f04b66348c28bf6b9c2d3f4a3b01af1d47 + rspec-rails (8.0.4) sha256=06235692fc0892683d3d34977e081db867434b3a24ae0dd0c6f3516bad4e22df + rspec-rebound (0.2.1) sha256=cda576775096339a4a5aec14da064f9ee8572deeb8849b548157c3e050b6cdd1 + rspec-support (3.13.7) sha256=0640e5570872aafefd79867901deeeeb40b0c9875a36b983d85f54fb7381c47c + rubocop (1.88.2) sha256=8def251c90cd955feb4daa3edc0ab56893250c4ce90ef81e6c80c03f9a939bbf + rubocop-ast (1.50.0) sha256=b9ca88300da0803ee222ad20cdb30494c0a784eed06fdc35d254b06d662788db + rubocop-capybara (3.0.0) sha256=7a64655238acda7f8f3c87e37ac825a64c615a79c17c253f1a28270dc3768c4b + rubocop-disable_syntax (0.2.0) sha256=1e61645773b3fc2f74e995ec65f605f7db59437c274fdfd4f385f60bf86af73e + rubocop-erb (0.7.1) sha256=17d376b5b9ebb08b75f6bce6bcdc61603b506ef4523473483885d2be88e9099d + rubocop-factory_bot (2.28.0) sha256=4b17fc02124444173317e131759d195b0d762844a71a29fe8139c1105d92f0cb + rubocop-performance (1.26.1) sha256=cd19b936ff196df85829d264b522fd4f98b6c89ad271fa52744a8c11b8f71834 + rubocop-rails (2.36.0) sha256=105a5f5b0001ff2ef28a3af90da50862464e0775e8d0016d599079c0ca408bdb + rubocop-rake (0.7.1) sha256=3797f2b6810c3e9df7376c26d5f44f3475eda59eb1adc38e6f62ecf027cbae4d + rubocop-rspec (3.10.2) sha256=0b3e2ecc592cd10ecbf0095bb58d1e357905276e069643523cc19eb7495f65e2 + rubocop-rspec_rails (2.32.0) sha256=4a0d641c72f6ebb957534f539d9d0a62c47abd8ce0d0aeee1ef4701e892a9100 + rubocop-thread_safety (0.7.3) sha256=067cdd52fbf5deffc18995437e45b5194236eaff4f71de3375a1f6052e48f431 + ruby-progressbar (1.13.0) sha256=80fc9c47a9b640d6834e0dc7b3c94c9df37f08cb072b7761e4a71e22cff29b33 + ruby2_keywords (0.0.5) sha256=ffd13740c573b7301cf7a2e61fc857b2a8e3d3aff32545d6f8300d8bae10e3ef + rubydex (0.4.1) sha256=9856af8bfbe656eed95449dd9e2c8239a74662b4bb8563e4b99221dbc065a34a + rubydex (0.4.1-aarch64-linux) sha256=abc1c9eb22479f60dd015fa81373163c5a71f2700b76bced1282631686bd6271 + rubydex (0.4.1-arm64-darwin) sha256=d23720253876d88fb98954e5d3a1ef9696a269697acf50e3ab53cdfbb2b66b96 + rubydex (0.4.1-x86_64-darwin) sha256=a9681db5bc9be6a62f226d96d6889b6b600d0b09e7576391702aafd29912145b + rubydex (0.4.1-x86_64-linux) sha256=4e2c8398c9fc585485b54edd28f5ecf76b5a02255e177b6f8402e9d2afffd51b + rubyzip (3.7.0) sha256=65c19294da75297a939006f3516deacc33185fbd721ff1954f7a231db6d3e121 + sawyer (0.9.3) sha256=0d0f19298408047037638639fe62f4794483fb04320269169bd41af2bdcf5e41 + securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 + selenium-webdriver (4.49.0) sha256=b430f091a3cababb356b6f6132e0e4f385b017819355f563557e1537819edc89 + simplecov (1.3.1) sha256=b326d38e819053499aa2ebe35d544d8bd780eba143a50f48a624b450ad87feec + snaky_hash (2.0.7) sha256=7d02c70012a3f932e48860cd024577908300c9aa615e0cb9b450aaa749cbcb4d + sprockets (4.4.1) sha256=fbd665edad0916de5c7abefef0fc616866a60c5e48ce2846f39ac3fc5df9e184 + sprockets-rails (3.5.2) sha256=a9e88e6ce9f8c912d349aa5401509165ec42326baf9e942a85de4b76dbc4119e + ssrf_filter (1.6.0) sha256=78d15bc26d0385c931f46f12a9c1cbb90e6556bd96b95f25e5a5f786c8dcf999 + standard (1.56.0) sha256=ae2af4d9669589162ac69ed5ef59dcf9f346d4afc81f7e62b84339310dfcb787 + standard-custom (1.0.2) sha256=424adc84179a074f1a2a309bb9cf7cd6bfdb2b6541f20c6bf9436c0ba22a652b + standard-performance (1.9.0) sha256=49483d31be448292951d80e5e67cdcb576c2502103c7b40aec6f1b6e9c88e3f2 + stimulus-rails (1.3.4) sha256=765676ffa1f33af64ce026d26b48e8ffb2e0b94e0f50e9119e11d6107d67cb06 + super_diff (0.19.0) sha256=c35fc1c0daa223d67b203fe3fb49a6cfd67850a53920319565c3c654e03ec902 + thor (1.5.0) sha256=e3a9e55fe857e44859ce104a84675ab6e8cd59c650a49106a05f55f136425e73 + thruster (0.1.26) sha256=6e45e807086b29d51404841bd1ad493b67cd95892fd65dc5afcdd32e82e94ce8 + thruster (0.1.26-aarch64-linux) sha256=2171cb34928c0250830008f535c4ab2ee57846cc3f5d3e96c3475f7b3de7a541 + thruster (0.1.26-arm64-darwin) sha256=40676164c433abf31313422305d9e9e9210cf941b1befad88e2428b3b8dcc36c + thruster (0.1.26-x86_64-darwin) sha256=c7f7f0cbefd8030ea03bf88f6a988f595a0618a35a1a0d358e729c6898eb5b6a + thruster (0.1.26-x86_64-linux) sha256=3117a6ee430663f845a0457699fe9a05232dcc6c396e2cc83504de5a223c60e8 + timeout (0.6.1) sha256=78f57368a7e7bbadec56971f78a3f5ecbcfb59b7fcbb0a3ed6ddc08a5094accb + tsort (0.2.0) sha256=9650a793f6859a43b6641671278f79cfead60ac714148aabe4e3f0060480089f + turbo-rails (2.0.23) sha256=ee0d90733aafff056cf51ff11e803d65e43cae258cc55f6492020ec1f9f9315f + tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b + underscore-rails (1.8.3) sha256=d37d0a297df9078a27e00df6bfa3f3b110eb27dd8f84c1588a9727a2cfbada47 + unicode-display_width (3.3.0) sha256=4b7aa66a4b11db50f6f7e98411215cd0dd10eaecb665d36eec5bcacb3fa0b613 + unicode-emoji (4.3.0) sha256=11c02fa73290378c066bb0562cd4c87d8e1b706fbbe0059ca12746a4244de8ce + uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6 + useragent (0.16.11) sha256=700e6413ad4bb954bb63547fa098dddf7b0ebe75b40cc6f93b8d54255b173844 + vcr (6.4.0) sha256=077ac92cc16efc5904eb90492a18153b5e6ca5398046d8a249a7c96a9ea24ae6 + version_gem (1.1.15) sha256=a73241587b29252e3567e0c818ded80730eb754d43b508f6ce4db22ca9ba27d0 + warden (1.2.9) sha256=46684f885d35a69dbb883deabf85a222c8e427a957804719e143005df7a1efd0 + webmock (3.26.4) sha256=8d8da206d217ebe6968cfb09c77f4533c23074e1432bad865f3994eacbaad50d + websocket (1.2.11) sha256=b7e7a74e2410b5e85c25858b26b3322f29161e300935f70a0e0d3c35e0462737 + websocket-driver (0.8.2) sha256=97c556b019bf3410b4961002ac501621e9322d3f8a7bc02161a09301cc4c4146 + websocket-extensions (0.1.5) sha256=1c6ba63092cda343eb53fc657110c71c754c56484aad42578495227d717a8241 + xpath (3.2.0) sha256=6dfda79d91bb3b949b947ecc5919f042ef2f399b904013eb3ef6d20dd3a4082e + zeitwerk (2.8.3) sha256=2c85125a8467ce069e20123d1e709a08955c9d29c118c25b46b7b7fafdbb92e5 + +RUBY VERSION + ruby 4.0.7 + +BUNDLED WITH + 4.0.22 diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md new file mode 100644 index 0000000000..5b6d426e1e --- /dev/null +++ b/ISSUE_TEMPLATE.md @@ -0,0 +1,29 @@ +### Step 1: Are you in the right place? + + * For general technical questions, post a question on [StackOverflow](http://stackoverflow.com/) tagged with errbit. + +### Step 2: Describe your environment + + * Errbit version: ____ + * OS: ____ + +### Step 3: Describe the problem: + +#### Steps to reproduce: + + 1. _____ + 2. _____ + 3. _____ + +#### Observed Results: + + * What happened? This could be a description, log output, etc. + +#### Expected Results: + + * What did you expect to happen? + +#### Application Logs: + + * Please include any relevant logs, especially if you encountered an + application error. diff --git a/LICENSE b/LICENSE index a033bf5b75..356b875794 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2013 errbit team +Copyright (c) 2010-2026 Errbit Team Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/Procfile b/Procfile index 718d5829ed..0ed27b44b1 100644 --- a/Procfile +++ b/Procfile @@ -1 +1 @@ -web: bundle exec puma +web: bin/rails server diff --git a/README.md b/README.md index 7e69561485..d393309e6d 100644 --- a/README.md +++ b/README.md @@ -1,329 +1,199 @@ -# Errbit [![TravisCI][travis-img-url]][travis-ci-url] [![Code Climate][codeclimate-img-url]][codeclimate-url] [![Coveralls][coveralls-img-url]][coveralls-url] [![Dependency Status][gemnasium-img-url]][gemnasium-url] +# Errbit -[travis-img-url]: https://secure.travis-ci.org/errbit/errbit.png?branch=master -[travis-ci-url]: http://travis-ci.org/errbit/errbit -[codeclimate-img-url]: https://codeclimate.com/github/errbit/errbit.png -[codeclimate-url]: https://codeclimate.com/github/errbit/errbit -[coveralls-img-url]: https://coveralls.io/repos/errbit/errbit/badge.png?branch=master -[coveralls-url]:https://coveralls.io/r/errbit/errbit -[gemnasium-img-url]:https://gemnasium.com/errbit/errbit.png -[gemnasium-url]:https://gemnasium.com/errbit/errbit +[](https://github.com/errbit/errbit/actions/workflows/rspec.yml) +[](https://github.com/standardrb/standard) +[](https://heroku.com/deploy?template=https://github.com/errbit/errbit/tree/main) - -### The open source, self-hosted error catcher - +## The open source, self-hosted error catcher Errbit is a tool for collecting and managing errors from other applications. -It is [Airbrake](http://airbrake.io) (formerly known as Hoptoad) API compliant, -so if you are already using Airbrake, you can just point the `airbrake` gem to your Errbit server. - +It is [Airbrake](https://www.airbrake.io) API compliant, so you can just +point the `airbrake` gem to your Errbit server (see +[howto](app/views/apps/_configuration_instructions.html.erb)).
|
-
- + Apps |
-
- + Errors |
-
- + Error Summary |
-
- + Error Backtraces |
| URL: | http://errbit.example.com/ |
|---|---|
| Callback URL: | http://errbit.example.com/users/auth/github |
| ['repo'] | Allow creating issues for public and private repos. |
|---|---|
| ['public_repo'] | Only allow creating issues for public repos. |
| [] | No permission to create issues on any repos. |
| PHP (>= 5.3) | -https://github.com/flippa/errbit-php | -
|---|---|
| Python | -https://github.com/mkorenkov/errbit.py , https://github.com/pulseenergy/airbrakepy | -
`s get reset. However, we also reset the\n// bottom margin to use `rem` units instead of `em`.\n\np {\n margin-top: 0;\n margin-bottom: $paragraph-margin-bottom;\n}\n\n\n// Abbreviations\n//\n// 1. Add the correct text decoration in Chrome, Edge, Opera, and Safari.\n// 2. Add explicit cursor to indicate changed behavior.\n// 3. Prevent the text-decoration to be skipped.\n\nabbr[title] {\n text-decoration: underline dotted; // 1\n cursor: help; // 2\n text-decoration-skip-ink: none; // 3\n}\n\n\n// Address\n\naddress {\n margin-bottom: 1rem;\n font-style: normal;\n line-height: inherit;\n}\n\n\n// Lists\n\nol,\nul {\n padding-left: 2rem;\n}\n\nol,\nul,\ndl {\n margin-top: 0;\n margin-bottom: 1rem;\n}\n\nol ol,\nul ul,\nol ul,\nul ol {\n margin-bottom: 0;\n}\n\ndt {\n font-weight: $dt-font-weight;\n}\n\n// 1. Undo browser default\n\ndd {\n margin-bottom: .5rem;\n margin-left: 0; // 1\n}\n\n\n// Blockquote\n\nblockquote {\n margin: 0 0 1rem;\n}\n\n\n// Strong\n//\n// Add the correct font weight in Chrome, Edge, and Safari\n\nb,\nstrong {\n font-weight: $font-weight-bolder;\n}\n\n\n// Small\n//\n// Add the correct font size in all browsers\n\nsmall {\n @include font-size($small-font-size);\n}\n\n\n// Mark\n\nmark {\n padding: $mark-padding;\n color: var(--#{$prefix}highlight-color);\n background-color: var(--#{$prefix}highlight-bg);\n}\n\n\n// Sub and Sup\n//\n// Prevent `sub` and `sup` elements from affecting the line height in\n// all browsers.\n\nsub,\nsup {\n position: relative;\n @include font-size($sub-sup-font-size);\n line-height: 0;\n vertical-align: baseline;\n}\n\nsub { bottom: -.25em; }\nsup { top: -.5em; }\n\n\n// Links\n\na {\n color: rgba(var(--#{$prefix}link-color-rgb), var(--#{$prefix}link-opacity, 1));\n text-decoration: $link-decoration;\n\n &:hover {\n --#{$prefix}link-color-rgb: var(--#{$prefix}link-hover-color-rgb);\n text-decoration: $link-hover-decoration;\n }\n}\n\n// And undo these styles for placeholder links/named anchors (without href).\n// It would be more straightforward to just use a[href] in previous block, but that\n// causes specificity issues in many other styles that are too complex to fix.\n// See https://github.com/twbs/bootstrap/issues/19402\n\na:not([href]):not([class]) {\n &,\n &:hover {\n color: inherit;\n text-decoration: none;\n }\n}\n\n\n// Code\n\npre,\ncode,\nkbd,\nsamp {\n font-family: $font-family-code;\n @include font-size(1em); // Correct the odd `em` font sizing in all browsers.\n}\n\n// 1. Remove browser default top margin\n// 2. Reset browser default of `1em` to use `rem`s\n// 3. Don't allow content to break outside\n\npre {\n display: block;\n margin-top: 0; // 1\n margin-bottom: 1rem; // 2\n overflow: auto; // 3\n @include font-size($code-font-size);\n color: $pre-color;\n\n // Account for some code outputs that place code tags in pre tags\n code {\n @include font-size(inherit);\n color: inherit;\n word-break: normal;\n }\n}\n\ncode {\n @include font-size($code-font-size);\n color: var(--#{$prefix}code-color);\n word-wrap: break-word;\n\n // Streamline the style when inside anchors to avoid broken underline and more\n a > & {\n color: inherit;\n }\n}\n\nkbd {\n padding: $kbd-padding-y $kbd-padding-x;\n @include font-size($kbd-font-size);\n color: $kbd-color;\n background-color: $kbd-bg;\n @include border-radius($border-radius-sm);\n\n kbd {\n padding: 0;\n @include font-size(1em);\n font-weight: $nested-kbd-font-weight;\n }\n}\n\n\n// Figures\n//\n// Apply a consistent margin strategy (matches our type styles).\n\nfigure {\n margin: 0 0 1rem;\n}\n\n\n// Images and content\n\nimg,\nsvg {\n vertical-align: middle;\n}\n\n\n// Tables\n//\n// Prevent double borders\n\ntable {\n caption-side: bottom;\n border-collapse: collapse;\n}\n\ncaption {\n padding-top: $table-cell-padding-y;\n padding-bottom: $table-cell-padding-y;\n color: $table-caption-color;\n text-align: left;\n}\n\n// 1. Removes font-weight bold by inheriting\n// 2. Matches default `