This should automate the first part of https://ops-guide.crates.io/ops/index-squash.html#manual-work
This should make our migration to axum 0.7 and hyper 1.x a little easier since our version of reqwest
is currently not compatible with hyper 1.x.
Having RequestBodyTimeoutLayer
(which changes the Body
type of the Request
) in the middle of the ServiceBuilder
has already been hard to deal with in the past, and does not seem to work anymore with axum 0.7. This change moves these three layers out of the ServiceBuilder
and applies the...
We know the exact status code that we expect, so we might as well use assert_eq!()
instead of the custom matcher implementation.
There is no need for the _SECONDS
suffix if we use Duration
directly for the const
:)
In the current situation reqwest
reexports the header code from the http
crate. However once we update hyper
to 1.x we will have two copies of the http
crate, with differing major versions. This leads to conflicts between the header code that reqwest
expects and the http
crate used by...
It looks like the repository got move to another GitHub org...
see https://github.com/smithy-lang/smithy-rs
Looks like the two layers above it aren't actually necessary 🤷♂️
The middleware that is responsible for rejecting requests without a User-Agent
header runs after the middleware that logs requests. The request logging middleware however was expecting a TypedHeader<UserAgent>
, which meant that requests without such a header were unconditionally rejected, eve...
<!-- Thank you for your Pull Request. Please provide a description above and review the requirements below.
Bug fixes and new features should include tests.
Contributors guide: https://github.com/tokio-rs/axum/blob/master/CONTRIBUTING.md -->
In crates.io I was impleme...
The NonCanonicalDownload
struct was useful when we had a custom error message, but as this is no longer the case we don't need this anymore.
This makes the function a bit more generic and reduces our reliance on Bytes
. Instead of using .body(Bytes::new())
we can now use .body("")
which shrinks the code a bit. .body(())
is unfortunately not possible yet (see https://github.com/tokio-rs/axum/pull/2411).
Resolves #500
If we only ever put "Service unavailable"
in it we might as well simplify the code :D
Replying with 201 Created
of 202 Accepted
should not result in showing errors.
Surprisingly, clippy does not warn about todo!()
by default. This PR changes that to avoid us unintentionally pushing work-in-progress code to the main
branch.
This PR upgrades our projects to axum 0.7 and hyper 1.x.
The changes on the axum side are described by https://tokio.rs/blog/2023-11-27-announcing-axum-0-7-0
Unfortunately there appears to be no way to adopt most of these breaking changes incrementally, so this PR has gotten rather large. T...
to quote from the code comment:
> The built-in extractors in axum
return plain text errors, but our API contract promises JSON errors. This middleware converts such plain text errors into corresponding JSON errors, allowing us to use the axum
extractors without having to care about the err...
This should allow us to add more middlewares without significantly affecting compile performance (see #7708).
These tests don't appear to be related to our routing code at all, so this commit moves them into the module where most of the tested code comes from.
This fixes the following issue:
$ cargo test --package crates_io_worker
error[E0432]: unresolved import `tokio::time`
--> crates_io_worker/src/worker.rs:13:12
|
13 | use tokio::time::sleep;
| ^^^^ could not find `time` in `tokio`
This has confused me too many times, so now it will be fixed :D
Having a short list of all the structs is surely nice, but if it then becomes complicated to find their impl blocks it's just not worth it, especially if not all the structs participate in this.
The Runner
should not unnecessarily share its connections with anything on the outside, so instead of using the Runner::connection()
fn this PR replaces it with TestDatabase::connect()
, which uses the connection pool inside the TestDatabase
struct instead.
This seems slightly easier on the eyes compared to the let-if-let-else construct before.
Bearer
is the official standard scheme (see https://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml), while token
is a GitHub-specific variant. According to https://docs.github.com/de/rest/authentication/authenticating-to-the-rest-api?apiVersion=2022-11-28#about-authenticatio...
This reduces the need for e.is::<NotFound>()
checks and makes the code a little less coupled to our HTTP layer and its error responses.
This PR extracts our top-level github
module into a dedicated workspace package. This makes it easier to enforce the decoupling between the GitHub client code and our HTTP API layer.
When diesel
returns an error it doesn't always mean that the resource couldn't be found, it could also be any other kind of error. A couple of places in the codebase were unconditionally transforming diesel
errors into "could not find ..." errors though. This PR fixes the issue by using `.opt...
This reduces some of the verbose code in the models/owner
module a bit.
This PR converts static PUBLIC_KEY_CACHE_LIFETIME_SECONDS: i64
to const PUBLIC_KEY_CACHE_LIFETIME: Duration
since most of the work can already be performed at compile time.
This removes the tight coupling between the HTTP/API layer with its AppResult
struct and the email
module, which should not know anything about HTTP or our API.
Getting a new connection for every loop iteration seems a bit wasteful...
see commit messages 😉
Instead of calling dotenvy::var("DOMAIN_NAME")
over and over we can read the value from the server config struct and save it inside the Emails
instance 🎉
Previously we implemented new email variants by adding another method to the Emails
struct, which then internally called self.send(...)
.
This PR explores a different implementation where each email variant is represented by its own struct, holding the values that it needs to generate the e...
AppResult
is something from the HTTP/API layer and the models
modules shouldn't know anything about that. This PR reduces the coupling a little bit by replacing AppResult
with QueryResult
where possible.
This is what we use in production so we may as well use it in tests too
This mirrors the Debug
implementation for AsyncSmtpTransport
While working on the crates.io codebase I noticed that most Transport
impls have a Clone
implementation, except for the FileTransport
. Since the PathBuf
inside is easy to clone I couldn't think of a reason why it shouldn't also have a Clone
impl, so this PR adds it :)
cargo before 1.34.0 only showed raw JSON errors when a non-200 status code was returned. In crates.io we are using the cargo_err()
fn in many places to ensure that the error that is returned uses the 200 OK
status code. As can be seen in the diff, we haven't been consistent in this though.
...
Previously we were creating these Transport
instances per email that we send, but that seems a bit unnecessary. Creating them once on server startup allows us to fail early for configuration issues.
Our in-memory implementation was also using a bit of custom code, when instead we could use t...
This allows us to fail early if the value can't be parsed into a Mailbox
There is no need to use BoxedAppError
if the only error returned from a function is a diesel
error.
We've had this enabled for about a month now so its time to remove the feature flag.
We're only logging the error, but not transforming it into an HTTP response, so there is no need for using the custom AppResult
type.
This does not appear to be used for anything... 🤷♂️
I wanted to add Debug
impls for all of the structs that implement the new Email
trait, but then I saw that some of them contain sensitive information. This PR replaces those fields with secrecy::SecretString
types to ensure that the Debug
representation is not unintentionally leaking sens...
Unfortunately lettre
uses different error types for all the transports, but that doesn't mean we need to follow that example. This PR merges the three variants into one using anyhow::Error
, since we don't really care about the specifics of the errors anyway.
The tracing logs are temporaril...
These appear to be unused and prevent us from using SecretString
inside the struct
At this point non-canonical downloads are responded to with a 404 error, so we might as well rely on the query failing to accomplish that. We unfortunately still need the query for download counting for now, but that will hopefully be resolved soon too.
This also means we don't need to use Handle::current().block_on()
here anymore :)
well... it's still 200 OK
due to the cargo rewrite middleware, but it would be 400 if that wasn't there...
previously this was converted to an internal server error, but since it's not the server's fault if faulty data is passed in this would have been wrong.
In https://github.com/rust-lang/crates.io/pull/7715 we implemented a middleware that ensured 200 OK
response status codes for all API endpoints that are relevant for cargo (see https://doc.rust-lang.org/cargo/reference/registry-web-api.html).
The PR also mentioned:
> This will allow us to...
These two don't appear to be needed anymore since they have been replaced by explicit error handling.
We are using our own Response
struct from src/tests/util/response.rs
to wrap around a conduit::Response
to make it more ergonomic to use in our test suite. This however creates a tight coupling between conduit
and our test suite.
This PR changes our own Response
to wrap `reqwest::blo...
Previously, our test suite ignored the hyper
wrapper and just interfaced with conduit
directly. We would eventually like to migrate our conduit
middlewares to tower
middlewares though, so we will need to run our tests through as much of our full stack as possible.
This PR changes the `...
.search()
is putting this value directly into MockRequest::with_query()
, which expects a URL-encoded string. This currently only works because we're skipping the hyper
layer in our test suite, but would cause invalid URL errors otherwise.
We have all of these metrics in Prometheus/Grafana already, so there is no need anymore for them to clutter up our logs :)
This moves our axum
middleware stack building code into the middleware
module, right next to similar code for the conduit
middlewares.
This was previously only usable from within the tests
module, but now it can also be used in unit tests.
We're only allowing SMTP in production, so logging the backend in our production logs seems a bit redundant.
We can use the re-exported types instead, which helps to avoid potential version conflicts.
This PR ports our normalize_path
middleware from conduit
to axum
.
Since this middleware needs to run before the axum Router
is involved, it needs to be wrapped around the router as suggested by https://docs.rs/axum/0.6.1/axum/middleware/index.html#rewriting-request-uri-in-middleware.
...
This allows us to call add_custom_metadata()
on both conduit::RequestExt
and http::Request
... aaaand another middleware migrated from conduit
to `axum.
This PR migrates our header-based traffic blocking middleware to axum. It is slightly different from the original conduit
middleware in that we perform the iteration inside the middleware instead of applying the middleware N times.
Since we use tracing
for the HTTP logs now and that uses the test writer we don't have to disable this anymore.
This PR builds on top of #5495 and improves the code a little bit more. See the individual commit messages for more details.
We don't save tokens in plaintext in the database, so the new secret scanning endpoint needs to look for the hashed token instead of the plaintext token.
We should not send emails for already revoked tokens.
Even if the tokens are already leaked on GitHub we shouldn't write them to the logs. Instead we will log the token ID.
These tests have been quite flaky on CI lately, so maybe increasing the timeout will fix the issue... 🤷♂️
When a token has already been revoked we will return to GitHub that it was a "true positive" now, but we skip sending out a notification email to the owner since we don't allow unrevoking tokens.
This PR also extracts a send_notification_email()
function, which ensures that an error while se...
Just like some of the previous PRs, this PR is migrating yet another conduit-based middleware to be an axum
middleware instead :)
see https://github.com/rust-lang/crates.io/commit/0ef1e2b84a11e4d569acfad7cf9b4ef8bd730148
This will make it easier to access the value from axum-based middlewares.
This should temporarily resolve https://github.com/rust-lang/crates.io/issues/5646 until we figure out what exactly went wrong and why the background worker still seems to be running correctly despite the Sentry error reports.
We don't want http
logging to clutter the error reporting. These errors are not deduplicated properly, because they contain the request ID and other unique things in the error message.
This PR switches the Sentry integration to the official sentry-tower
crate and integrates it with the axum
server and our conduit-axum
glue code.
Previous the tower-http
feature enabled the sentry-tower
dependency and its http
feature, but it did not enable the tower
feature of the sentry
crate. This leads to sentry::integrations::tower
not being available, even though the dependency is enabled correctly.
https://github.com/rust-lang/crates.io/pull/3399 added support for including the nginx processing time in the response time calculation, but we currently don't know what exactly the overhead of the nginx processing is. This PR adds an additional field to our HTTP request/response logs, if the tim...
This PR essentially reverts #3399, after #5655 has shown that using the existing req.elapsed()
is as good of a guess as using the X-Request-Start header.
This has the side effect of slightly simplifying the migration of the log_request
middleware to axum
.
Related:
Reverts rust-lang/crates.io#5655
I've seen enough... 😅
The result of this experiment is that nginx_time
was actually negative in all cases where it was logged, which essentially means that req.elapsed()
is as good of a guess as using the X-Request-Start
header. In any case it looks l...
We're not really using this bot (anymore?).
This is meant to eventually replace the equivalent conduit
middleware once it is feature complete. Until then we only log with debug
level, which does not show up in production logs.
The two missing pieces are custom metadata and the error
field. I've decided to put those into dedicated ...
Using add_custom_metadata()
in the email code makes it hard to port the log_request
middleware to axum, due to the CUSTOM_METADATA
thread local which appears to be hard to migrate into the async world. The easiest solution for now is to use tracing
calls directly instead and log the messa...
This requires us to go back to putting custom metadata in a request extension, but this time we're putting it in a Arc<Mutex<Vec>>
to make it extra complicated... and compatible with axum middlewares 😅
This PR drops the logging part of the conduit
middleware and uses the axum
middleware for it instead, which is now on par with the conduit
implementation.
... 🤦♂️
In the world of axum
request handlers are not (really) allowed to return errors, so we need to rethink how conduit
handler errors can be passed to the axum
middleware. Since we already support custom metadata we can convert an Err
result into a custom metadata field in the existing `condu...
Without this Clone
implementation the compiler was showing errors on the router.layer(middleware)
call.
Adding the Clone
derive fixed the compiler error for me.
I've also removed an unnecessary mut
keyword, that the compiler was warning about.
Instead of reading all environment variables when we create the middleware, we outsource this to the server config construction and then access the relevant values via request.app().config
.
The reason for this change is that axum
makes it a bit harder for use to use "configurable" middlewa...
Another PR, another middleware migrated from conduit
to axum
... 🚀
This is similar to the RequestCounter
of the balance_capacity
middleware and ensures that the gauge is decreased again even if a different exit path out of the method is used somehow (i.e. panic!()
).
This PR is migrating most of our static file serving from conduit
to `axum.
Previously the middleware was configurable with a path, but axum
middlewares make this a bit more complicated (can't use from_fn()
). Since we only need this twice at the moment it was easiest to duplicate the cod...
This is the final middleware that needed to be migrated to axum
. The rest of the middlewares are only relevant to the conduit
route handlers.
We use GitHub Actions now :)
This should hopefully prevent more issues during publish
Similar to #5568, this PR implements a CrateScope
struct, which we use for the crate_scopes
column of the API tokens database table. It also includes a matches()
method to verify whether it matches a crate name or not.
This PR adjusts our AuthCheck
calls for the three relevant endpoints (publish, change owner, yank) to check the token scope restrictions if the token has any.
Note that for the publish operation we unfortunately need an extra database query to determine if the request is trying to publish a ...
This PR adds four additional tests for the owner change endpoint, related to the implementation of token scopes. Note that these tests are currently all returning 200 Ok
because token scope checks have not been enabled for this endpoint yet. This will be done in a follow-up PR and the tests wil...
This allows us to use something like:
let auth = AuthCheck::default()
.with_endpoint_scope(EndpointScope::ChangeOwners)
.for_crate(crate_name)
.check(req)?;
[gradle-intellij-plugin :intellij-emberjs:verifyPlugin] Invalid plugin descriptor 'description': All links in description must be HTTPS: http://emberjs.com/
This turns the endpoint_scopes
column from Option<Vec<String>>
to Option<Vec<EndpointScope>>
, which is a bit more restrictive in the values it supports, and ensure that we're only serializing endpoint scopes to the database that actually exist in our application.
As discussed in the team meeting, this should instead be solved by having both variants as dedicated scopes, if necessary.
Related:
... to prepare to the token scopes implementation
This makes them much easier to handle when opened in the editor... 😅
This allows us to lookup specific files without having to mutate the path
of the request.
Depending on the path this could potentially cause a panic if there is no character boundary at index 1.
This will also have the side effect of our logs showing the correct requested path instead of /index.html
for everything.
There is no obvious need for this file to exist outside of the assets
folder and need special handling in nginx
see https://github.com/conduit-rust/conduit-hyper
We are the only users of this crate and we would eventually like to migrate away from using conduit
. Vendoring the crate into the main crates.io repo will hopefully make it easier to refactor things towards a different web framework.
Most of them can use http
directly, which helps us migrate away from conduit
eventually
Most of them can use http
directly, which helps us migrate away from conduit
eventually
Related:
By reordering the header checks, we can use .into_body()
instead.
The app.db()
closure takes the only existing database connection and any API requests inside the closure can deadlock waiting on the connection. For some reason this does not appear to cause any issues in the current state, but once the API requests are going through an async layer this is star...
These are required for Ember.js v4 compatibility
Ember.js 4.x is causing issues... :-(
This PR at least makes CI green again, while we fix things.
Extracted from #747
Unfortunately this is hard to test in our test suite, but our GitHub Pages setup should soon show that this works as intended.
We're not exporting any templates, so we don't need this as a dependency
Having ember-try
kick in unintentionally after pnpm test
is unnecessarily annoying...
see https://github.com/simplabs/ember-error-route
This is essentially the exact same implementation that we have already been using, but in a reusable package :)
This should hopefully unblock #16
This is neither particularly pretty yet, nor well documented, but it includes the basic functionality and two test modules to check that everything works as intended.
for that sweet pnpm support 😆
They were disabled in 2014 for some unknown reason, but these days there is really no reason to have them disabled.
This should hopefully fix the currently failing CI jobs
As the commit messages say, this PR replaces the "Feature request" issue template with a link to the "Discussions" tab and the "Bug report" issue template with an issue form (see https://docs.github.com/en/communities/using-templates-to-encourage-useful-issues-and-pull-requests/configuring-issue-...
This is unfortunately required to unblock the ember-cli-addon-docs update, which is required to unblock our Ember.js 4.x support here 🙈
Those were setting devDependencies
instead of npm.devDependencies
🙈
<img width="317" alt="Bildschirmfoto 2021-12-12 um 18 29 16" src="https://user-images.githubusercontent.com/141300/145722892-c331d94c-d22e-4fcb-a541-7a433724138f.png">
related to https://github.com/rust-lang/crates.io/issues/2595
Straight up copy from the master
branch :)
The previous approach wasn't working particularly well... 🙈
This is needed for fastboot to work correctly, but also to correctly use the fetch()
polyfill, if necessary.
Without this the let promise = controller.fetchData();
will be invalid because the method does not return anything.
This should hopefully fix most of the Ember.js 4 compatibility issues :)
Looks like a little copy-paste mistake 😅
as discussed yesterday :)
This component was introduced by ea0522e3eb221aee528301a25454795c8700db3e for testing purposes, but seems to no longer be used anywhere
Extracted from https://github.com/ember-cli/ember-exam/pull/746. Thanks @SergeAstapov :)
This is unfortunately required for Ember.js 4 compatibility. The ember-data
version that we're relying on still uses @ember/string@1
, which is not compatible with Ember.js 4. But we can't update ember-data
(yet) due to a bug related to the hasMany
implementation... :-/
The reference to the HasManyArray
never changes, so the download graph is not rerendered with Ember Data v4. We pass the content
value of the Promise into the component instead to fix this.
This allows users to only opt-in to some of the laxness, if necessary.
This should probably be considered a breaking change since the type of the public ParseMode
has changed.
Resolves https://github.com/rust-lang/crates.io/issues/2595
tl;dr you can now use parenthesis (e.g. X AND (Y OR Z)
) in license expressions. the custom /
operator is still supported for now, though not directly compatible with the use of parenthesis.
There is no need for this trait bound since we only use the iterator once.
This can be used during development of pages that are only available if authenticated.
This ensures that the checker board pattern is used in rendering tests, but application tests use the correct background from the body
element.
<img width="533" alt="Bildschirmfoto 2021-12-20 um 14 57 38" src="https://user-images.githubusercontent.com/141300/146778496-cb310474-94c5-4326-98d6-5b6b5d6138de.png">
... and run that workflow only for pushes on the primary branch, instead of slowing down every single PR. Unless we make that coverage data more visible (e.g. using something like Codecov), it is probably not worth it to send 60% of the CI time of each PR just on the backend test coverage trackin...
This works similar to the RUST_VERSION
updates that we have already configured, but this time using the crate
datasource, which corresponds to crates.io.
This is basically similar to the /me
route, but split into multiple subroutes to make the settings more scaleable.
<img width="1001" alt="Bildschirmfoto 2021-12-21 um 13 54 58" src="https://user-images.githubusercontent.com/141300/146974376-bfd3e759-5843-4940-b784-0966e3ded9fd.png"> <img wi...
As discussed on Discord, the cargo login
command is showing links to https://crates.io/me to access the API tokens. Since that is probably more important than any other bookmarks and has backwards compatibility concerns this PR is changing the /me
redirection to /settings/tokens
(instead of...
<img width="1008" alt="Bildschirmfoto 2021-12-22 um 20 02 10" src="https://user-images.githubusercontent.com/141300/147142321-1f56d28c-6a3c-4751-aefa-2d1e84bdb934.png">
Resolves https://github.com/rust-lang/crates.io/issues/3687
Note that this is based on #4314 and includes those commits to...
> Refused to run the JavaScript URL because it violates the following Content Security Policy directive: "script-src 'self' 'unsafe-eval' 'sha256-n1+BB7Ckjcal1Pr7QNBh/dKRTtBQsIytFodRiIosXdE='". Either the 'unsafe-inline' keyword, a hash ('sha256-...'), or a nonce ('nonce-...') is required to enab...
As suggested on Discord (see https://discord.com/channels/442252698964721669/835156566746595386/923210089085665381), this PR:
db_read()
and db_write()
There is no real downside of having these PRs open automatically and whether or not we merge them is still our decision in the end.
<img width="994" alt="Bildschirmfoto 2021-12-23 um 22 33 02" src="https://user-images.githubusercontent.com/141300/147293184-03d219c1-78d0-422c-a757-e2cd0f4a07b4.png">
<img width="994" alt="Bildschirmfoto 2021-12-23 um 22 30 14" src="https://user-images.githubuserconte...
With over 70k crates it has become quite useless to filter the crates by their starting letter, so we might as well remove this feature to declutter the user interface a little bit.
This moves the search icon to the submit button, and makes that submit button visible and clickable to the user. It also replaces the search icon PNG with an SVG.
<img width="993" alt="Bildschirmfoto 2021-12-24 um 11 34 12" src="https://user-images.githubusercontent.com/141300/14734...
The relevant links are now in the footer and everything else is already linked in "The Cargo Book", so there is no need for this dropdown in the header anymore.
This PR adds the https://github.com/postcss/postcss-custom-media PostCSS plugin to the style pipeline and imports the default breakpoints from https://tailwindcss.com/docs/responsive-design to eventually consolidate all of our existing breakpoints.
this makes yarn
work without build errors on Node.js 10
see commit messages
Maybe that fixes CI...?! 🙏
see commit messages
This PR applies the necessary changes to the build pipeline to transpile the ESnext Decorators to regular ESlatest code. It also adds a basic smoke test to ensure that everything works as expected.
/cc @NullVoxPopuli
because it's soooo much faster
This addon does not do any filesystem work or other non-standard things on the Node.js side so (slow) testing on Windows seems unnecessary here
to prevent duplicate dependabot builds
to prevent duplicate dependabot builds
because speed and UX and everything...
We don't deploy the dummy app anywhere so these dependencies are not used anywhere.
... because Node 4 is no longer maintained by the Node.js team and several dependency updates are blocked because we still support Node 4.
This PR will require a new major version release.
forgot that in #39 🙈
ember-cli-qunit
is sort-of deprecated
This should temporarily fix CI until we switch over to Browserstack
to prevent dependabot PRs from running CI twice
... to prevent duplicate dependabot CI runs
... because Node 4 is no longer maintained by the Node.js team and several dependency updates are blocked because we still support Node 4.
This PR will require a new major version release.
This should hopefully fix the broken CI builds
This makes yarn
work on Node 10 without any build failures
to prevent unnecessary double builds for e.g. dependabot PRs
... because Node 4 is no longer maintained by the Node.js team and several dependency updates are blocked because we still support Node 4.
This PR will require a new major version release.
We use headless Chrome now...
... to get rid of xvfb
We use a QUnit version now that includes the PR that this polyfill was extracted from.
We don't seem to generate ESLint checks inside of the test suite anymore, so this option is no longer used anywhere.
/cc @rwjblue
Ember CLI already injects a livereloader and livereload.js
is not even available when run via ember test --server
/cc @rwjblue
Mostly extracted from #16987. Thanks @rwjblue!
Closes #17239, Closes #16987
Extracted from https://github.com/emberjs/ember.js/pull/16987
@rwjblue wanna review your own commit? 😉
this will make it possible to reuse the relative-module-paths
module in the build pipeline of Ember.js
This is a somewhat significant change as we are now using terser
under the hood, instead of uglify-js/es
. On first glance, the slightly changed output looks alright, but this should probably be verified a little more thoroughly.
I compared the outputs of ember build -prod
and it seems that this call is unnecessary as both outputs were identical.
A similar change happened in https://github.com/emberjs/ember.js/pull/16987/commits/e6c3adbd435c2975d34f4c783a0928338d3bbbec, but the same works for Babel 6 too.
/cc @rwj...
... and change the dependency declaration to use a caret constraint
This addon does not have any JS files that need to be transpiled, so we can move the dependency to devDependencies
/cc @kategengler
According to https://github.com/emberjs/ember.js/pull/17275#issuecomment-445059036 the ember.min.js
asset is not being used anymore. This PR removes the asset from the build pipeline, since the uglify step takes a significant amount of time.
/cc @rwjblue
... so that it can be used with https://github.com/tleunen/babel-plugin-module-resolver without producing any warnings
It seems that this is identical but slightly more conventional.
/cc @rwjblue
see commit messages
I have manually confirmed that the ember build -prod output is the same as before
/cc @rwjblue
see commit messages
powered by https://github.com/lerna/lerna-changelog
/cc @rwjblue
This should resolve #158
I've targeted the v6.x
branch, since this bug is not limited to the 7.x release series.
/cc @stefanpenner @rwjblue
/cc @kategengler @rwjblue
<img width="733" alt="bildschirmfoto 2018-12-06 um 01 26 48" src="https://user-images.githubusercontent.com/141300/49552989-08517700-f8f6-11e8-85d0-d403fe2d482a.png">
Let's see if this works... 🤞
see commit messages
... and convert testem.json
to JS
v1.0.0 dropped Node 4 support, so should be compatible with this project
Extracted from #17255
... to figure out if that is what's causing CI to fail
see commit messages
/cc @rwjblue
The resolveModuleSource
was removed in Babel 7, so it should be considered deprecated for anyone using Babel 6. The recommended alternative is the babel-plugin-module-resolver
plugin. babel-plugin-module-resolver
works with both Babel 6 and 7, so we should migrate to it while still keeping ...
... because there is no obvious reason for all this complexity
This function is using jQuery even though it might not be available, and it is querying a selector which no longer seems to be used by QUnit. In addition to that it is not called from anywhere and since it's broken it doesn't seem to be used manually anymore either.
This drops Node 4 support, which we have already done too.
This should now be fully compatible with a future upgrade of the build pipeline towards Babel 7
/cc @rwjblue
This PR changes the README.md
that is generated by default for new addons in a few ways:
Since we previously supported Node 0.10 and 0.12 this is technically a breaking change.
/cc @ef4 @rwjblue
Node 0.10 and 0.12 are no longer supported and Node 4 has native Promise
support there is no reason anymore for us to use rsvp
in here.
/cc @ef4 @rwjblue
In Chrome abbr[title]
elements have a text-decoration
CSS style attached by default, but since the bootstrap version that is being used uses border-bottom
instead it results in a duplicate underline which this PR fixes.
Before: <img width="99" alt="bildschirmfoto 2017-12-01 um 12 11 39"...
/cc @rwjblue @stefanpenner
This adds tests that should prevent https://github.com/Turbo87/auto-dist-tag/issues/10 from happening again in the future. Unfortunately it seems that these tests are already passing, so https://github.com/Turbo87/auto-dist-tag/issues/10 must have been caused by something unrelated 🤔
... to include the changes in https://github.com/emberjs/ember-test-helpers/pull/263
We don't need this as a regular dependency here because this addon actually has no code that needs transpiling.
see https://github.com/aexmachina/ember-cli-sass/pull/169#discussion_r157203490
/cc @aexmachina @ryanrishi
Pinning Node to v8.1.3 does not seem useful 🤔
Similar to e.g. https://yarnpkg.com/ this PR changes the code to start the search while typing instead of having to click the <kbd>Enter</kbd> button. It also debounces the search task (250ms) to limit the amount of requests that are hitting the server.
![crates-live-search](https://user-image...
Similar to https://github.com/rust-lang/crates.io/pull/1186 this PR changes the "Search" page to load and reload data in the background
This should unblock #115
/cc @stefanpenner @rwjblue
Addresses https://github.com/broccolijs/broccoli-concat/pull/116#issuecomment-349067711
/cc @stefanpenner @rwjblue @ef4
because speeeeeed!
<img width="306" alt="bildschirmfoto 2017-12-05 um 20 38 47" src="https://user-images.githubusercontent.com/141300/33626929-5377a534-d9fc-11e7-9fca-d75612882787.png">
github_changelog_generator
includes closed issues in the changelog which often results in useless/wrong entries. lerna-changelog
is based on labeled PRs which gives us much better control over the final output.
because emberjs/ember-qunit#282 and emberjs/ember-mocha#173
@rwjblue should this be backported?
similar to https://github.com/ember-cli/ember-cli-qunit/pull/191
This should be a non-breaking change as no public APIs have changed.
This PR updates ember-cli-mocha
(and ember-simple-auth
) to test the changes in https://github.com/emberjs/ember-mocha/pull/173 and https://github.com/ember-cli/ember-cli-mocha/pull/229
ember-cli-babel
does not seem to be used by this addon as the app
and addon
folders are essentially empty. This will allow users of this addon to drop ember-cli-shims
as that requires that all used addons use at least v6.6.0 of ember-cli-babel
.
/cc @billybonks
/cc @timhaines
Addresses the component-test
and test framework detector parts of https://github.com/emberjs/ember.js/issues/15933
/cc @rwjblue @alexander-alvarez
/cc @rwjblue
github_changelog_generator
includes closed issues in the changelog which often results in useless/wrong entries. lerna-changelog
is based on labeled PRs which gives us much better control over the final output.
Resolves #260
/cc @ef4 @rwjblue
/cc @rwjblue
/cc @rwjblue
... as recommended by Ember CLI
This PR adds a basic smoke test to the repo using broccoli-test-helper
and jest. It is also using
co` to simplify the Promise chains using generator functions for Node 4 and 6.
warn(...arguments)
unfortunately can't be used like this at the moment since ...arguments
won't be transpiled properly.
see https://github.com/chadhietala/babel-plugin-debug-macros/issues/47
Obviously it would be best if this issue was fixed in babel-plugin-debug-macros
directly, but ...
This PR implements the alternative API for signed numbers proposed in https://github.com/sindresorhus/pretty-bytes/pull/38:
prettyBytes( 42, {signed: true}); // +42 B
prettyBytes(-13, {signed: true}); // -13 B
prettyBytes( 0, {signed: true}); // ±0 B
Closes https://github.co...
The order should be vendor.css, app.css
, but with the current code the order was indeterministic due to how broccoli-concat
works.
/cc @rwwagner90
This is not needed for addons that don't need JS transpilation
... to get a consistent dev environment (and muuuuch faster CI builds later 😉 )
The only used things that Node 4 currently does not support are destructuring and ES6 imports, but those are relatively easy to replace. The benefit is having much less tooling to worry about and the ability to use the watch mode of Mocha.
@ghempton you might have to enable the project at https://travis-ci.org/ first before it actually works.
/cc @rwjblue
chai-files
is essentially not needed and some other code can be simplified too :)
because it's better!
<!-- Thank you for sending a PR! -->
<!-- Please perform the following checks and check all the boxes that apply. -->
<!-- If a particular point is not applicable to your PR,
strike-through the line by wrapping the text in double tildes. -->
<!-- If your PR does not create or e...
This will hopefully help to resolve https://github.com/Turbo87/auto-dist-tag/issues/10
... and the now unused broccoli-brocfile-loader
dependency
This PR removes the deprecated install:addon
, install:bower
and install:npm
commands
backport of #6503 to the beta
branch
> the NPM3 progress bar is screwing around with inquirer, e.g. when asking to overwrite files > > essentially the question is hidden behind the progressbar and it looks as if NPM froze
/cc @rwjblue @nathanhammond @stefanpenner
/cc @alexlafroscia
This PR cleans up the package.json
file, which will now be used to fill the https://www.npmjs.com/package/ember-source page.
Should this target beta
or master
?
/cc @rwjblue @stefanpenner
Resolves #6502
/cc @rwjblue @nathanhammond @stefanpenner @hjdivad
/cc @stefanpenner @nathanhammond
This was apparently added by mistake in #23
This PR replaces ember-cli-jshint
with ember-cli-eslint
in the default app/addon blueprints.
Resolves #6501 and unblocks #3529 🎉
/cc @nathanhammond @stefanpenner @rwjblue @alexlafroscia @BrianSipple
Resolves #6462
/cc @kellyselden @nathanhammond @rwjblue
Resolves a very tiny part of #14692
/cc @locks @rwjblue
/cc @rwjblue
Resolves #75
/cc @rwjblue @pangratz @kellyselden @trabus
Example:
$ ember install ember-cli-mocha
NPM: Installed ember-cli-mocha
installing ember-cli-mocha
install bower package ember-mocha-adapter
cached https://github.com/teddyzeenny/ember-mocha-adapter.git#0.3.1
Bower: Installed ember-mocha-adapter=ember-mocha-adapter#~0.3.1
inst...
Resolves #14667
/cc @rwjblue @Patsy-issa
Resolves #115
We install bower
globally anyway and bower
is not used programmatically anywhere. This change is also in line with the default Ember CLI addon blueprint.
/cc @rwjblue
/cc @rwjblue @stefanpenner
Resolves #189
/cc @rwjblue @trentmwillis
/cc @cibernox
Resolves #28
/cc @rwjblue
This essentially replaces the ember-cli-node-assets
dependency with a treeForVendor()
hook implementation with just two simple Broccoli nodes.
/cc @rwjblue @elwayman02
Resolves #30
/cc @rwjblue
Resolves #102 and unblocks part of the journey to Babel 6
/cc @rwjblue @stefanpenner @nathanhammond
/cc @rwjblue @stefanpenner
Resolves the issues caused by https://github.com/travis-ci/travis-cookbooks/pull/786
Resolves the issues caused by travis-ci/travis-cookbooks#786
Note that I opened https://github.com/ember-cli/ember-cli-mocha/pull/155 to test if this change actually works.
including link to https://github.com/ember-cli/ember-cli-chai
you might also want to run https://docs.npmjs.com/cli/deprecate on this package
including link to https://github.com/ember-cli/ember-cli-chai
you might also want to run https://docs.npmjs.com/cli/deprecate on this package
This is mostly just following https://github.com/ember-cli/ember-new-output/compare/v2.9.1...v2.10.0 and brings us back onto a stable Ember.js release including the new Glimmer rendering engine.
This follows the discussion in https://github.com/ember-cli/ember-cli-mocha/issues/154
This PR is using broccoli-rollup
to treeshake and bundle files in the ember-test-helpers
, mocha
and ember-mocha
modules.
Note that this is irrelevant for ember-cli-mocha
, which imports the ES6 files instead.
The framework
property seems only relevant when e.g. serve_files
is used, but not when we're setting test_page
and including the test framework ourselves.
As visible in e.g. https://github.com/skylines-project/skylines/blob/master/ember/testem.js#L2 you could even set the property to `qu...
Resolves https://github.com/teddyzeenny/ember-mocha-adapter/issues/35 to reduce the number of moving parts in the ember-mocha
ecosystem.
/cc @rwjblue @teddyzeenny
/cc @rwjblue
Resolves #35
/cc @rwjblue @teddyzeenny
Resolves another small amount of #14692
/cc @locks
This essentially also deprecates the ember-mocha-adapter
itself since its only purpose is supporting that implicit async behavior.
/cc @rwjblue @teddyzeenny
Resolves #78
/cc @rwjblue @teddyzeenny
I am not sure why this only came up now, but using let
apparently broke https://travis-ci.org/ember-cli/ember-cli-mocha/builds/182601114
https://github.com/tildeio/router.js/pull/197 fixed the reason for this addon inside of Ember.
see also https://github.com/emberjs/ember.js/blob/master/CHANGELOG.md#2100-november-28-2016
/cc @alexspeller @stefanpenner
/cc @acburdine
addresses the issues mentioned in https://github.com/emberjs/ember-mocha/pull/121
/cc @rwjblue
This is recommended by ember-mocha
, now that https://github.com/emberjs/ember-mocha/pull/121 is merged. Compared to the originally proposed solution using a wrapper function, this solution is backwards-compatible and will also work with older ember-mocha
releases.
/cc @rwjblue
Resolves https://github.com/ember-cli/ember-cli/issues/6414
/cc @stefanpenner @rwjblue @chadhietala
/cc @rwjblue @trentmwillis
Reverts skylines-project/skylines#583
see https://github.com/stefanpenner/ember-redirect-to/pull/2
This PR implements the server and client code to switch aircraft symbols on the map depending on the type of aircraft assigned to the flight.
Resolve...
see https://github.com/jasonmit/ember-intl/blob/master/docs/asynchronously-loading-translations.md
this removes 200KB from our app.js
file while adding one additional AJAX request for the requested translation. not sure yet what is worse...
Otherwise testem
is no using the phantomjs
version we installed, but using the global one instead which is v1.9 by default on Travis.
This doesn't seem to be needed on any target platform anymore.
This PR cleans up and merges the schema
and related modules
Resolves #513
This PR also updates the https://github.com/JetBrains/gradle-intellij-plugin dependency, which removes the need for the cleanSandboxPlugins
task.
The ProjectStructureDetector
class is not used on any IDE other than IntelliJ, so we can not rely on using the EmberModuleType
class anywhere, because WebStorm, PyCharm, etc. aren't using it. This PR changes the code to use a ProjectComponent
instead that caches the Ember.js projects that w...
ContentRoots are dropped if SourceRoots are found, so any java file in node_modules would previously prevent the Ember.js project from being found.
Resolves #5
Resolves #9
It is annoying to always manually have to add another test method for each test file pair that was added to the fixtures folder. This PR makes it easier by automatically detecting the test files and generating test cases for each one.
This PR adds the ember-suave plugin to the Ember.js app, which is using JSCS for JavaScript code style checking. The resulting style inconsistencies were fixed afterwards.
thanks to @matklad for figuring this out in https://github.com/intellij-rust/intellij-rust/pull/176
This PR updates the source files to use ES6 syntactic sugar :candy:
I've combined the new IntelliJ logo with the official Rust logo to make a logo for this plugin (and the intellij-rust
GitHub org)
This PR resolves #20
This PR add a {{notification-container}}
component which reduces the code that users have to paste into their own templates down to a single component.
This PR adds a few useful live templates. It also resolves #136 by using surrounder live templates for the the loops.
This needs to be tested by a lot more people than just me before I feel confident merging this...!
This PR adds basic support for Ember.js addons in IntelliJ. Previously Ember.js projects needed to contain an app/app.js
file, with these changes an .ember-cli
file is also considered for project detection.
Additionally the addon
folder will now be marked as a source folder automatically...
The list was previously rendered with "1. ... / 1. ... / 1. ..." instead of "1. ... / 2. ... / 3. ...". I've also removed the $
prefixes to make it easier to copy-paste the commands.
... and remove redundant plugin application
This PR moves the @SuppressWarnings("GroovyUnusedDeclaration")
annotation from the individual members to the class itself to prevent more unused member warnings.
This PR fixes a the alternativeIdePath
option default value rendering.
as mentioned in #49
The current master branch fails on the CI servers due to mysterious reasons involving the Kotlin beta3 version. This PR reverts Kotlin back to the beta2 version.
This PR adds a warning to the Readme about this project being largely unmaintained and a link to the "successor" project at https://github.com/Turbo87/intellij-emberjs
I hope you don't feel bad about me starting from scratch with the other plugin, but due to the large time gap I felt it was no...
We should use the Java environment/language on TravisCI because it will automatically detect that this project is based on Gradle and will fill in the necessary build steps automatically.
This makes it a lot easier to import the project into IntelliJ and build it from the command line. It is also now officially recommended to use this plugin (see http://www.jetbrains.org/intellij/sdk/docs/tutorials/build_system.html).
This makes it easier to identify the types of elements compared to using the very generic HbPsiElementImpl class. It also opens up the possibility of specialized implementations of e.g. HbStringLiteral.getValue()
This PR adds two basic acceptance tests for the index page and the search functionality. The implementation is probably not perfect yet but I wanted to get it out there before going on vacation next week. I'll continue improving it after I get back in January.
This can be used to convert template files into JS files
This implements issue #927 and allows us to load Flask config from JSON files that can be shared for example with frontend dev tools like grunt.
see http://flask.pocoo.org/docs/patterns/appfactories/
this will allow us to run api and frontend apps in parallel if necessary
Error mails now look like this:
App: skylines.frontend
Time: 2013-12-08 15:06:47,820
URL: https://www.skylines-project.org/about/license
IP: 37.201.227.153
User: Tobias Bieniek <[email protected]>
Message...
This implements easier script running with Flask-Script